Java列表UnsupportedOperationException
1.概述
在本快速教程中,我們將討論使用大多數List
實現的某些API時可能發生的常見Exception
- UnsupportedOperationException
。
java.util.List
具有比rray
所支持的普通功能更多的功能。例如,僅使用一個內置方法調用,就可以檢查結構中是否有特定元素。這通常就是為什麼我們有時需要將array
轉換為List
或Collection
。
有關核心Java List
實現ArrayList
的介紹,請參考本文。
2. UnsupportedOperationException
發生此錯誤的常見方式是當我們使用java.util.Arrays:
asList()
方法時java.util.Arrays:
public static List asList(T... a)
它返回:
- 給定
array
大小的固定大小List
- 與原始
array
元素類型相同的元素,並且它必須是一個Object
- 元素以相同順序 如原始陣列
- 可
serializable
並實現[RandomAccess](https://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html)
的列表
由於T是一個varargs
,我們可以直接將數組或項目作為參數傳遞,該方法將創建一個固定大小的初始化列表:
List<String> flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");
我們還可以傳遞一個實際的array
:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);
由於返回的List
是固定大小的List
,因此我們無法添加/刪除元素。
嘗試添加更多元素將導致UnsupportedOperationException
:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);
flowerList.add("Celosia");
此Exception
的根源是,由於返回的對象與java.util.ArrayList.
不同,因此不執行add()
操作java.util.ArrayList.
這是一個java.util.Arrays.
的ArrayList
java.util.Arrays.
獲取相同異常的另一種方法是嘗試從獲取的列表中刪除一個元素。
另一方面,有一些方法可以在需要時獲取可變List
。
其中之一是直接從asList()
的結果創建ArrayList
或任何種類的列表:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = new ArrayList<>(Arrays.asList(flowers));
3.結論
總之,重要的是要理解,將更多的元素添加到列表中不僅對不可變的列表可能會帶來問題。
與往常一樣,示例的完整源代碼可在GitHub上獲得。
0 條評論,你可以發表評論,我們會進行改進
