2017-05-26 28 views
-2

我用下面的代碼創建列表的通用陣列混淆不同類型的列表:使用通用陣列時出現異常?

List<Integer>[] intLists = (List<Integer>[])new List[] {Arrays.asList(1)}; 
List<? extends Object>[] objectList = intLists; 
objectList[0] = Arrays.asList(1.01); 
int n = objectList[0].get(0); // class cast exception! 

但它給了我一個轉換異常。 我該如何解決這個問題?

+0

你明白這行嗎列表<? extends Object> [] objectList = intLists; ?您仍在使用列表

+4

該代碼無法爲您提供ClasscastException,因爲它不會編譯。 –

回答

1

我不知道,雖然它顯然是創建列表的原始陣列這給出了一個編譯錯誤,並同時存儲它似乎編譯器無法檢測到它的數組List(它不能檢測列表的類型 - 所以也許它只是將它解釋爲一個原始列表),因此不會拋出錯誤,並且當您嘗試將元素檢索到整數時,它會嘗試將double轉換爲int 。這不是一個正確的用法。

我相信你可以做(Integer) listArray[0].get(0)但它會導致浮點後的精度損失。

0

objectList的類型[0] .get(0);是Double,所以你必須將它轉換爲int。 以下工作:

int n = ((Double) objectList[0].get(0)).intValue(); 

但是這取決於你使用的情況下,你的代碼是不是很好。

0

你試圖在一個整數變量中存儲一個double值。你不能那樣做。因此,只要將其存儲在雙代替:

 List<Integer>[] intLists = (List<Integer>[])new List[] {Arrays.asList(1)}; 
     List<? extends Object>[] objectList = intLists; 
     objectList[0] = Arrays.asList(1.01); 
     double n = (double) objectList[0].get(0); // Make it a double :) 
+0

如果需要將其存儲爲「int」,則不能回答該問題。 – bradimus