好的,这是由于语义上的细微差异。
List
这是原始类型的
List,这相当于
T是类型的
Object。所以就像说:
List<Object>
现在,编译器知道一个事实,无论发生什么,这都是type的子类
Object。如果可以的话..
List myList = new ArrayList();myList.add(new Object());
它将正常工作!这是因为
Object相同或类型的某种派生。
List<?>
从字面上看,这是 一个未知列表 (Java
Docs)。我们甚至都不知道这里的事物的子类是type
Object。实际上,
?类型本身就是未知类型。没关系
Object!这就是为什么当您尝试去做时..
List<?> myList = new ArrayList<?>();myList.add(new Object());
您得到一个编译时错误!



