2

假设你有一个C支持泛型的类(所以C<X>定义了一个类型)。我想做类似的事情:

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

C<X>.class

但是编译器不同意我的观点:P

有什么提示吗?

4

2 回答 2

7

你能得到的最接近的是

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

由于泛型是一个编译时特性,所以它并没有像你看到的那样做很多事情。

于 2012-12-30T19:27:44.093 回答
7

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

但是,如果您使用定义具体类型参数的泛型类进行子类化,例如:

class StringC extends C<String> {}

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

于 2012-12-30T19:29:38.637 回答