获取泛型类的.class

时间:2012-12-30 19:24:38

标签: java generics

假设您有一个支持泛型的某个类C(因此C<X>定义了一个类型)。我想做点什么:

我想获得Class<C<X>>类的实例。我想说这可以通过以下表达式获得:

C<X>.class

但编译器不同意我的意见:P

任何提示?

2 个答案:

答案 0 :(得分:7)

最接近的是

@SuppressWarning("unchecked")
Class<C<X>> cxClass = (Class<C<X>>) (Class) C.class

由于泛型是一个编译时功能,所以这并没有真正做到,你可以看到。

答案 1 :(得分:7)

由于type erasure,这是不可能的。类型参数在运行时不可用 - C<Whatever>的所有实例实际上都只是C的实例。因此,您只能编写类C.class

这样的类文字

但是,如果您通过定义具体类型参数来子类化泛型类,例如:

class StringC extends C<String> {}

...实际上可以通过反射获得类型参数(String)的值。请参阅以下博客: