为什么这段代码会出现错误?
List<String>[] l = new ArrayList<String>[10];
Eclipse 说我无法创建通用数组,但实际上我正在尝试创建一个集合数组。
它与收藏无关。(原始)数组构造函数不能采用参数化类型。
尝试
List[] l = new ArrayList[10];
(感谢@newacct)
请尝试这样
List<String>[] al = new ArrayList[10];
al[0] = new ArrayList<String>();
al[1] = new ArrayList<Date>(); // Give u error because List accepts only String
像这样尝试: List[] l = new List[10]; 然后将 ArrayList(s) 添加到您的 List 数组中......简单的数组不能保存泛型信息。它早在泛型之前就被包含在语言中......
“数组创建表达式创建的对象是一个新数组,其元素属于 PrimitiveType 或 ClassOrInterfaceType 指定的类型。如果 ClassOrInterfaceType 不表示可具体化的类型,则会出现编译时错误。”
根据语言规范,第 4.7 节:
由于某些类型信息在编译过程中会被删除,因此并非所有类型在运行时都可用。在运行时完全可用的类型称为可具体化类型。
当且仅当满足以下条件之一时,类型才是可具体化的:
- 它指的是非泛型类或接口类型声明。
...
所以简单地说,“因为语言说你不能”。我了解维护向后兼容性的最终原因,但我不熟悉细节。