2013-10-17 68 views
1

我有setter方法:鑄造不起作用(INT []翻番[])

public void setValues(int[] values){ 
    this.values = (double[])values;   
} 

和Java不允許我這樣做。我收到關於不可轉換類型的消息。我知道我可以使用整數和doubleValue()方法,但上面的解決方案應該工作(我認爲)。

那麼,怎麼了?

+1

這是整型數組,不是int,你可以創建新的雙陣列和複製與個別投每個值。 – Epsilon

+1

你不能隨意施放陣列。 –

+0

你不能那樣做。 –

回答

7

intdouble的鑄造與鑄造從int[]double[]是不同的東西。後者無法工作,因爲數組是一個對象。所以你有2個不兼容的對象。演員陣容肯定會在運行時失敗,因此編譯器不允許演員陣容,並給你編譯器錯誤。

不幸的是,沒有直接的方法將int[]轉換爲double[]。你必須爲此編寫循環。

for (int i = 0; i < values.length; ++i) { 
    this.values[i] = values[i]; 
} 

或者,如果你可以使用Guava,您可以使用Doubles.toArray方法:

this.values = Doubles.toArray(Ints.asList(values)); 
3

你不能大規模投橫跨原語的整個陣列。您需要通過元素中檢索數組的時候投或轉換它的元素:

for(int i=0; i<values.length; i++){ 
    this.values[i] = values[i]; //int-to-double cast implicit 
}