为什么这不可能?
List<Foo>.class
或者更具体地说,让A
成为具有类型参数的类(即class A<T> { // code }
,为什么new A<T>().getClass()
可能A<Foo>.class
编译错误?
答案 0 :(得分:2)
在泛型中,&lt;和&gt;只是Generic类的一个选项。
在您的示例中,类是List,因此您可以键入List.class(如果已实例化,则键入list.getClass())
列表与LT; T&GT;只是一个列表,具有完全相同的类。 T仅由编译器用于检查一致性。
答案 1 :(得分:0)
new A<T>().getClass()
返回与A.class
完全相同的对象。 Class
个对象表示没有通用信息的原始类型。 A<T>.class
只会对它实际代表的内容撒谎,所以不允许这样做。
答案 2 :(得分:0)
我认为这是一个公平的问题。
这很好用:
Class c = new ArrayList().getClass();
c= ArrayList.class;
这不是:
c = new ArrayList<String>().getClass(); // still ok
c = ArrayList<String>.class; // compilation fails
无论是否使用泛型类型,结果总是相同的。
与new ArrayList<String>().getClass()
相比,此new ArrayList().getClass()
没有带来任何更多内容,并且已被接受。
与ArrayList<String>.class
相比,此ArrayList.class
没有带来任何更多内容,而不是{{1}}。
那么,为什么?
可能正是编译器尽力阻止我们编写无用的代码。