如何实例化通用集合数组?

时间:2012-04-20 03:40:05

标签: java arrays list generics

为什么这段代码出错了?

List<String>[] l = new ArrayList<String>[10];
Eclipse说我无法创建通用数组,但事实上我正在尝试创建一个集合数组。

4 个答案:

答案 0 :(得分:2)

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

尝试

List[] l = new ArrayList[10];

(谢谢@newacct)

答案 1 :(得分: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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

根据language spec, section 15.10

  

“数组创建表达式创建一个对象,该对象是一个新数组,其元素属于PrimitiveType或ClassOrInterfaceType指定的类型。如果ClassOrInterfaceType不表示可重新生成的类型,则为编译时错误。”

根据language spec, section 4.7

  

由于在编译期间会删除某些类型信息,因此并非所有类型在运行时都可用。在运行时完全可用的类型称为可再生类型。

     

当且仅当下列之一成立时,类型才可以恢复:

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

...

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