簡體   English   中英

Java:將數組轉換為列表異常

[英]Java: Convert Arrays To List Exception

Arrays類包含一個將數組轉換為list的函數。當我將Integer數組轉換為ArrayList ,它將引發異常。

Integer[] array = new Integer[]{2, 4, 3 , 9};
ArrayList<Integer> test = (ArrayList<Integer>) Arrays.asList(array);

Arrays.asList(array)返回一個Integer類型的List ,當我將Integer列表轉換為ArrayList ,它會拋出一個異常

 java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

ArrayList實現了List接口,為什么會拋出異常呢?

當我嘗試使用List引用變量直接捕獲對象時,這工作正常。

Arrays.asList返回List定義解釋,它不是java.util.ArrayList ,而是一個固定大小的AbstractList

您需要將所有內容包裝在新列表中:

List<Integer> newList = new ArrayList<>(Arrays.asList(array));

Arrays#asList不返回ArrayList<T> ,它返回List<T> 你對List的實現一無所知,只是因為它遵守了List合同,並且有記錄的限制( List是固定大小的,因此可能沒有實現像List#add這樣的可選操作會改變它的大小)。

static <T> Array.asList方法返回List<T> ,而不是ArrayList<T> 您不能假設實現將返回List<T>ArrayList<T>實現 - 這就是您獲得異常的原因。

該錯誤表明該實現返回了Arrays類中定義的內部類的實例; 內部類也稱為ArrayList ,但它與java.utils定義的ArrayList<T>無關。 兩者之間的簡單轉換不起作用 - 如果必須有java.util.ArrayList<T> ,則需要自己從asList方法返回的List<T>創建它。

您可以使用List作為參數初始化新的ArrayList

Integer[] ints = new Integer[]{2,4,3,9};
List<Integer> temp = Arrays.asList( ints );
ArrayList<Integer> testList = new ArrayList<Integer>(temp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM