2012-04-20 116 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