2011-06-24 37 views
0

爲什麼不允許這樣做? arr是雙[]。從陣列轉換爲向量時的java泛型問題

Vector<Double> v = new Vector<Double>(Arrays.asList(arr)); 

我得到一個無法識別的構造函數錯誤。它認爲我試圖使用Vector(java.util.List<double[]>)構造函數,這似乎是奇怪的因爲它爲什麼會是double [] s的列表?它編譯,如果我讓這個

Vector<Double> v = new Vector(Arrays.asList(arr)); 

但後來我得到一個關於選中分配

回答

4

這是因爲Double是不一樣的在Java中double警告。

Arrays.asList doesn't work with primitives,所以當你用double[]作爲它的第一個參數調用它時,它認爲你傳入的數組本身作爲...型參數列表中的第一個參數。因此,Arrays.asList返回double[]列表,只包含一個元素:您在通過double[]

1

泛型像List<double>不允許原始類型,這就是爲什麼你的程序失敗。

您需要迭代數組並逐個填充項目。或者您可以使用ArrayUtils.toObject()方法將double[]轉換爲Double[]。該類在Apache Commons庫中找到。

+0

所以有沒有簡單(無需遍歷每個項目)的方式來一個數組轉換成向量? – jhlu87

+0

@ jhlu87添加了對可以使用的實用程序方法的引用。 – Marcelo

0

爲了澄清,'double'是一個原始類型,如'int'或'char'。 '雙'是班級類型。你可以製作一個矢量。將原始數組更改爲'Double',而不是'double'的數組。

0

Arrays.asList(T... a)不像原始數組所預期的那樣工作,因爲泛型和基元不會很好地相處。編譯器對T使用double[],這就是爲什麼Arrays.asList返回List<double[]>

我想在最短的代碼來獲得你想要的是:

Vector<Double> v = new Vector<Double>(arr.length); 
for (double d : arr) v.add(d);