獲取在執行時滿足泛型引數的類
很多繫結的泛型引數,就像那些在靜態方法中使用,不能在執行時被回收(參見其他執行緒上擦除 )。但是,在執行時,有一種通用策略用於訪問滿足類的泛型引數的型別。這允許依賴於對型別的訪問的通用程式碼,而不必通過每次呼叫來執行緒型別資訊。
背景
可以通過建立匿名內部類來檢查類的泛型引數化。該類將捕獲型別資訊。一般來說,這種機制被稱為超型別令牌,在 Neal Gafter 的博文中有詳細介紹。
實現
Java 中的三種常見實現是:
用法示例
public class DataService<MODEL_TYPE> {
private final DataDao dataDao = new DataDao();
private final Class<MODEL_TYPE> type = (Class<MODEL_TYPE>) new TypeToken<MODEL_TYPE>
(getClass()){}.getRawType();
public List<MODEL_TYPE> getAll() {
return dataDao.getAllOfType(type);
}
}
// the subclass definitively binds the parameterization to User
// for all instances of this class, so that information can be
// recovered at runtime
public class UserService extends DataService<User> {}
public class Main {
public static void main(String[] args) {
UserService service = new UserService();
List<User> users = service.getAll();
}
}