1

为什么这段代码会出现错误?

List<String>[] l = new ArrayList<String>[10];

Eclipse 说我无法创建通用数组,但实际上我正在尝试创建一个集合数组。

4

4 回答 4

2

它与收藏无关。(原始)数组构造函数不能采用参数化类型。

尝试

List[] l = new ArrayList[10];

(感谢@newacct)

于 2012-04-20T03:46:11.917 回答
1

请尝试这样

List<String>[] al = new ArrayList[10];
al[0] = new ArrayList<String>();
al[1] = new ArrayList<Date>(); // Give u error because List accepts only String
于 2012-04-20T05:48:17.100 回答
0

像这样尝试: List[] l = new List[10]; 然后将 ArrayList(s) 添加到您的 List 数组中......简单的数组不能保存泛型信息。它早在泛型之前就被包含在语言中......

于 2012-04-20T03:46:58.190 回答
0

根据语言规范,第 15.10 节

“数组创建表达式创建的对象是一个新数组,其元素属于 PrimitiveType 或 ClassOrInterfaceType 指定的类型。如果 ClassOrInterfaceType 不表示可具体化的类型,则会出现编译时错误。”

根据语言规范,第 4.7 节

由于某些类型信息在编译过程中会被删除,因此并非所有类型在运行时都可用。在运行时完全可用的类型称为可具体化类型。

当且仅当满足以下条件之一时,类型才是可具体化的:

  • 它指的是非泛型类或接口类型声明。

...

所以简单地说,“因为语言说你不能”。我了解维护向后兼容性的最终原因,但我不熟悉细节。

于 2012-04-20T03:56:49.750 回答