[英]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.