假设你有一个C
支持泛型的类(所以C<X>
定义了一个类型)。我想做类似的事情:
我想获得Class<C<X>>
该类的一个实例。我想说这可以通过以下表达式获得:
C<X>.class
但是编译器不同意我的观点:P
有什么提示吗?
你能得到的最接近的是
@SuppressWarning("unchecked")
Class<C<X>> cxClass = (Class<C<X>>) (Class) C.class
由于泛型是一个编译时特性,所以它并没有像你看到的那样做很多事情。
由于类型擦除,这是不可能的。类型参数在运行时不可用 - 所有实例C<Whatever>
实际上都是 simple 的实例C
。因此,您只能编写像C.class
.
但是,如果您使用定义具体类型参数的泛型类进行子类化,例如:
class StringC extends C<String> {}
...实际上可以String
通过反射获得类型参数(即)的值。请参阅这些博客: