获取在运行时满足泛型参数的类
很多绑定的泛型参数,就像那些在静态方法中使用,不能在运行时被回收(参见其他线程上擦除 )。但是,在运行时,有一种通用策略用于访问满足类的泛型参数的类型。这允许依赖于对类型的访问的通用代码,而不必通过每次调用来线程类型信息。
背景
可以通过创建匿名内部类来检查类的泛型参数化。该类将捕获类型信息。一般来说,这种机制被称为超类型令牌,在 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();
}
}