考虑泛型类Foo<T>
,在其成员中,如果想获取类型(type)T
的类实例(class instance of type T),是不可以直接调用 T.class
的。原因在于,Java 语言无法获取泛型类型参数(T
)的运行时信息(不可以直接调用 T.class
)。
0. 常用解决方案
既然无法调用泛型类型参数的运行时类型信息,便在调用端,显示地传递该类的运行时类型信息进去(通过构造函数),一种惯用的解决方案如下:
class Foo{ private final Class type; public Foo (Class type) { this.type = type; } public static void main(String[] args) { // 在客户端调用时,便会显得有些啰嗦 Foo f = new Foo (SomeClass.class); }}