为什么这段代码出错了?如何instanciate泛型集合数组?
List<String>[] l = new ArrayList<String>[10];
Eclipse说我不能创建一个通用数组,但实际上我正尝试创建一个集合数组。
为什么这段代码出错了?如何instanciate泛型集合数组?
List<String>[] l = new ArrayList<String>[10];
Eclipse说我不能创建一个通用数组,但实际上我正尝试创建一个集合数组。
每language spec, section 15.10:
“数组创建表达式创建一个对象,它是一个新的数组,其元素是由PrimitiveType或指定类型的ClassOrInterfaceType。如果ClassOrInterfaceType不表示可保留类型,则为编译时错误。“
和每个language spec, section 4.7:
由于某些类型的信息在编译时擦除,不是所有类型的都可以在运行时。在运行时完全可用的类型称为可重用类型。
A型是reifiable当且仅当如下条件之一成立:
- 它指的是一个非通用类或接口类型声明。
...
所以简单地说, “因为语言说,你不能”。我了解保持向后兼容性的最终原因,但我不熟悉细节。
非常感谢 – gaoshougaoshou 2012-09-10 02:41:02
它与收藏无关。 (原始)数组构造函数不能使用参数化类型。
尝试
List[] l = new ArrayList[10];
(感谢@newacct)
我们走吧!比我愚蠢的评论好多了。 – 2012-04-20 03:47:02
参数化类型的数组是有效的*类型*(例如'List
尝试这样的:列表[] L =新的List [10]; 然后将ArrayList(s)添加到List的数组中... 简单数组无法保存泛型信息。它被列入泛型之前长的语言...
请尝试这样
List<String>[] al = new ArrayList[10];
al[0] = new ArrayList<String>();
al[1] = new ArrayList<Date>(); // Give u error because List accepts only String
如果你正在寻找使字符串的ArrayList,你可能想要做此ArrayList升=新的ArrayList (); –
2012-04-20 03:53:47