根据擦除概念,我认为List
和List<Object>
是相同的,但我注意到
List<String> strList = new ArrayList<String>();
List<Object> objList = strList; //error
List objList = strList; //valid construction
List<?> objList = strList; //valid construction
最佳答案
List<?>
是类型未知的列表。您不能在此处插入因为您不知道将允许插入哪种类型。它
具有(或不具有)泛型类型,但是您无法知道它。如果
您可能要插入一些内容(首先键入列表)
违反某些规定,因此您不应该这样做。
List<Object>
是一个列表,您可以在其中插入任何对象,以及何时插入您得到的物品(起初只知道)是一个对象(并且
您已经知道)。
List
仅允许向后兼容(我认为)。之前Java 5没有泛型。 Java需要允许之间的类型转换
List
和List<Anything>
,以便旧代码可以与现代代码一起使用。