由于引入了泛型,因此Class被参数化,因此List.class生成Class .这很清楚.
我无法弄清楚的是如何获得一个自身参数化的类型的实例,即Class >.就像在这个片段中:
public class GenTest { staticT instantiate(Class 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 , but I would like to // pass in Class > ArrayList l = GenTest.instantiate(ArrayList.class); } }
我经常遇到这个问题的变化,我仍然不知道,如果我只是错过了什么,或者是否真的没有更好的方法.谢谢你的建议.
Class类是类型的运行时表示.由于参数化类型在运行时经历类型擦除,因此Class的类对象与Class >和Class
>相同.
您无法使用.class表示法实例化它们的原因是,这是用于类文字的特殊语法.当语言参数化时,Java语言规范明确禁止使用此语法,这就是不允许使用List