2012-04-20 107 views
1

为什么这段代码出错了?如何instanciate泛型集合数组?

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

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

+2

如果你正在寻找使字符串的ArrayList,你可能想要做此ArrayList升=新的ArrayList (); – 2012-04-20 03:53:47

回答

0

language spec, section 15.10

“数组创建表达式创建一个对象,它是一个新的数组,其元素是由PrimitiveType或指定类型的ClassOrInterfaceType。如果ClassOrInterfaceType不表示可保留类型,则为编译时错误。“

和每个language spec, section 4.7

由于某些类型的信息在编译时擦除,不是所有类型的都可以在运行时。在运行时完全可用的类型称为可重用类型。

A型是reifiable当且仅当如下条件之一成立:

  • 它指的是一个非通用类或接口类型声明。

...

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

+0

非常感谢 – gaoshougaoshou 2012-09-10 02:41:02

2

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

尝试

List[] l = new ArrayList[10]; 

(感谢@newacct)

+0

我们走吧!比我愚蠢的评论好多了。 – 2012-04-20 03:47:02

+1

参数化类型的数组是有效的*类型*(例如'List []')。 * array creation *表达式中不能有参数化的组件类型。 – newacct 2012-04-20 09:08:40

0

尝试这样的:列表[] L =新的List [10]; 然后将ArrayList(s)添加到List的数组中... 简单数组无法保存泛型信息。它被列入泛型之前长的语言...

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