由于引入了泛型,Class 被参数化,因此 List.class 生成 Class。这很清楚。
我无法弄清楚的是如何获取自身参数化类型的 Class 实例,即 Class>。就像在这个片段中:
public class GenTest {
static <T> T instantiate(Class<T> clazz) throws Exception {
return clazz.newInstance();
}
public static void main(String[] args) throws Exception {
// Is there a way to avoid waring on the line below
// without using @SuppressWarnings("unchecked")?
// ArrayList.class is Class<ArrayList>, but I would like to
// pass in Class<ArrayList<String>>
ArrayList<String> l = GenTest.instantiate(ArrayList.class);
}
}
我经常遇到这个问题的变体,我仍然不知道,如果我只是错过了什么,或者是否真的没有更好的方法。感谢您的建议。
最佳答案
Class 类是一种类型的运行时表示。由于参数化类型在运行时经历类型删除,Class 的类对象将与 Class> 和 Class
> 相同。
您不能使用 .class 符号实例化它们的原因是这是用于类文字的特殊语法。 Java Language Specification当类型被参数化时,特别禁止这种语法,这就是为什么 List
关于java - 如何获取参数化类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71585/