假设您有一个支持泛型的某个类C
(因此C<X>
定义了一个类型)。我想做点什么:
我想获得Class<C<X>>
类的实例。我想说这可以通过以下表达式获得:
C<X>.class
但编译器不同意我的意见:P
任何提示?
答案 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
)的值。请参阅以下博客: