如何使用通用类型的Realm?

Tru*_*an1 4 java generics realm

我有一个泛型方法,并希望使用泛型类型检索对象.这是我的方法:

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();
}
Run Code Online (Sandbox Code Playgroud)

以上不适用realm.where(Class<T>).如何将我的泛型类型传递给Realm?

Viv*_*ath 13

您必须提供通用参数,如下所示:

public static <T extends RealmObject & IndentifierModel> void storeNewData(Class<T> clazz) {
  T item = realm.where(clazz) 
    .equalTo("ID", 123)
    .findFirst();
}
Run Code Online (Sandbox Code Playgroud)

Class<T>是无效的,因为那就像说realm.where(Class<List<String>>)realm.where(Class<String>).你需要的是一个实际的Class<T>例子.但你不能使用T.class或者因为T不可在运行时由于类型擦除.在运行时,该方法基本上需要一个Class<T>实例才能正常工作.既然你无法得到它T,那么你必须明确地提供一个类型的参数Class<T>.