[英]Convert List<E> to List<T>, where T is abstract
我試圖概括一種我需要經常調用的方法。 它接受List<E extends RealmObject>
並返回List<T extends Pojo<E>>
。 從E
到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;
}
我也嘗試使用此答案 ,但是List<T>
不會接受用clazz.newInstance()
創建的對象。
編輯:添加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);
除了作為抽象類, T
還是參數類型,不能在構造函數new T()
。
一個典型的解決方案是使用反射:
fromRealmList
向您的方法傳遞附加參數Class<T> clazz
clazz.getConstructor(...).newInstance(...)
也許並不完美,但這應該可行。
--edit--以下是不使用T
類型的示例:
public static <E extends RealmObject> List<Pojo<E>> fromRealmList(
RealmList<E> realmList, Class<Pojo<E>> clazz) {
List<Pojo<E>> pojoObjects = new ArrayList<>();
...
Pojo<E> newInstance = clazz.getConstructor(...).newInstance(...).fromRealm(...);
pojoObjects.add(newInstance);
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.