爲什麼這段代碼出錯了?如何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