List<Object> myList = new ArrayList<String>(); //(hint: no)
Map<Integer> myMap = new HashMap<int>(); // (hint: also no)
Run Code Online (Sandbox Code Playgroud)
为什么上述声明中的陈述有误?
对于第一个,因为Java泛型不是协变的.所以你甚至不能这样做:
ArrayList<Object> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此文章:Java理论与实践:泛型陷阱.
对于第二个,您不能使用基元作为泛型类型.
我们来看第一个例子.考虑一下您应该能够执行的操作List<Object>:添加,删除,检索任何对象.
您正尝试使用可以添加,删除和仅检索字符串的集合来填充这些要求.
List<Object> myList = new ArrayList<String>();
// This should be valid based on the List<Object> interface but obviously
// MyClass isn't String...so what would the statement do?
myList.add(new MyClass());
Run Code Online (Sandbox Code Playgroud)
第二个原因仅仅是因为Java中的泛型不支持基本类型.有关更多信息,您可以查看: