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,因此您可以键入List.class(或者List.getClass(),如果已实例化)


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答案)