對 List 新增、刪除是很基本的行為
但居然出現「不支持的操作」異常
這是為什麼呢?
Integer[] array = new Integer[] {1, 2, 3};
List<Integer> list = Arrays.asList(array);
list.add(4); // UnsupportedOperationException
list.remove(0); // UnsupportedOperationException
原因是 Arrays.asList() 方法所 return 的 ArrayList
是 Arrays.class 中的 private class
並非一般認知的 java.util.ArrayList
Arrays$ArrayList 並未實作 add 與 remove 方法
所以會往上呼叫所繼承的 AbstractList
而 AbstractList.add() 與 AbstractList.remove()
會直接拋出 UnsupportedOperationException
最終出現的異常訊息如下
問題的確發生於 java.util.AbstractList
java.util.AbstractList.add(AbstractList.java:153)
java.util.AbstractList.add(AbstractList.java:111)
java.util.AbstractList.remove(AbstractList.java:167)
官方的 Javadoc comment 也說明
此方法產生的 List 是固定長度的
解決
使用 Arrays.asList() 方法所產生的 List 無法增刪
若要增刪,需要再轉成 java.util.ArrayList
List<Integer> list = new ArrayList<Integer>(Arrays.asList(array));