Я пытаюсь обобщить метод, который мне нужно будет назвать много. Он принимает List<E extends RealmObject>
и возвращает List<T extends Pojo<E>>
. Переход от E
к T
осуществляется черезСписок преобразований <E> в список <T>, где T является абстрактным
new T().fromRealm(realmObject)
Это не будет работать, потому что T
является абстрактным классом, так что я не могу создать его экземпляр.
public static <E extends RealmObject, T extends Pojo<E>> List<T> fromRealmList(
RealmList<E> realmList) {
List<T> pojoObjects = new ArrayList<>();
if (realmList != null) {
for (E realmObject : realmList) {
try {
pojoObjects.add(new T().fromRealm(realmObject));
} catch (Exception e) {
e.printStackTrace();
}
}
}
return pojoObjects;
}
Я также попытался с this answer, но List<T>
не будет принимать объект, созданный с clazz.newInstance()
.
EDIT: добавление Pojo класс
public abstract class Pojo<R extends RealmObject> {
@NonNull
public abstract R toRealm();
@NonNull
public abstract Pojo<R> fromRealm(R realmObject);
}
EDIT2: добавление альтернативное решение, что до сих пор не работает: Required T, found Pojo<E>.
T newInstance = clazz.getConstructor()
.newInstance()
.fromRealm(realmObject);
pojoObjects.add(newInstance);
Я отредактировал мой вопрос с большим количеством некоторого кода. –
Проблема заключается в методе .fromRealm, но я не могу понять, почему возвращаемый тип - Pojo, что верно. –
В вашем случае вы можете безопасно отбрасывать возвращаемое значение 'fromRealm' в' T', однако вы получите предупреждение о компиляторе. На самом деле лучше удалить тип «T» и работать с «Pojo». В конце концов, ваш 'pojoObjects' не содержит' T extends Pojo '' s, но фактический 'Pojo ' 's. Я адаптировал ответ. –
geert3