Java 从具有类型参数的类获取.class
为什么这是不可能的Java 从具有类型参数的类获取.class,java,generics,Java,Generics,为什么这是不可能的 List.class 或者更具体地说,让A成为具有类型参数的类(即class A{//code}为什么newa().getClass()是可能的,而A.class是编译器错误?在泛型中,中的部分只是泛型类的一个选项 在您的示例中,该类是List,因此您可以键入List.class(或者List.getClass(),如果已实例化) List只是一个列表,具有完全相同的类。T仅由编译器用于检查一致性。new a().getClass()返回与A.class完全相同的对象。cla
List.class
或者更具体地说,让
A
成为具有类型参数的类(即class A{//code}
为什么newa().getClass()
是可能的,而A.class
是编译器错误?在泛型中,List只是一个列表,具有完全相同的类。T仅由编译器用于检查一致性。
new a().getClass()
返回与A.class
完全相同的对象。class对象表示没有泛型信息的原始类型。A.class
只会谎报它实际表示什么,因此它是不允许的。我认为这是一个公平的问题
这很好:
Class c = new ArrayList().getClass();
c= ArrayList.class;
这并不是:
c = new ArrayList<String>().getClass(); // still ok
c = ArrayList<String>.class; // compilation fails
c=new ArrayList().getClass();//仍然正常
c=ArrayList.class;//编译失败
无论是否使用泛型类型,结果都是相同的
此new ArrayList().getClass()
与new ArrayList().getClass()
相比,没有带来更多的功能,因此它被接受
与ArrayList.class
相比,这个ArrayList.class
没有带来更多的功能,而且它也没有
那么,为什么呢
可能是编译器尽了最大努力阻止我们编写无用的代码。请参见此内容(另请参见:(cletus答案)