如何使用通用类型的Realm?

时间:2015-07-07 19:35:17

标签: 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();
}

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

1 个答案:

答案 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>类型的参数。