我有一个通用方法,并希望使用泛型类型检索对象。这是我的方法:
public static <T extends RealmObject & IndentifierModel> void storeNewData() {
...
T item = realm.where(Class<T>) // Not compiling (Expression not expected)
.equalTo("ID", data.get(i).getID())
.findFirst();
}
上述内容不适用于realm.where(Class<T>)
。如何将我的泛型类型传递给Realm?
答案 0 :(得分:13)
您必须提供如下通用参数:
public static <T extends RealmObject & IndentifierModel> void storeNewData(Class<T> clazz) {
T item = realm.where(clazz)
.equalTo("ID", 123)
.findFirst();
}
Class<T>
无效,因为它类似于realm.where(Class<List<String>>)
或realm.where(Class<String>)
。您需要的是一个实际的Class<T>
实例。但由于类型擦除,T.class
在运行时不可用,因此无法使用T
。在运行时,该方法基本上需要Class<T>
实例才能正常工作。由于您无法从T
获取,因此您必须明确提供Class<T>
类型的参数。