當使用 Arrays.asList(T... a)
產生
List
物件,
而當你在呼叫
List
的
add()
或
remove()
新增或刪除元素時,會發生java.lang.UnsupportedOperationException
錯誤。
UnsupportedOperationException
錯誤List<String> list = Arrays.asList("01", "02", "03", "04");
list.add("05"); // java.lang.UnsupportedOperationException 錯誤
原因是Arrays.asList(T... a)
回傳的並不是
java.util.ArrayList
,而是 Arrays$ArrayList
,也就是 java.util.Arrays
的一個內部類別,
而這個Arrays$ArrayList
並未實作上述的}
add()
,
因此實際呼叫的是其繼承的父類別
AbstractList
,
所以真正呼叫的是AbstractList.add(E e)
,最終呼叫的是 AbstractList.add(int index, E element)
,原始碼如下。
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
...
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
...
}
轉成ArrayList
就不會有上述的錯誤了。
List<String> list = new ArrayList<>(Arrays.asList("01", "02", "03", "04"));
list.add("05");