如果你用Arrays.asList(T... a)
產生List
物件,而當你在呼叫List
的add()
或remove()
新增或刪除元素時,會發生java.lang.UnsupportedOperationException
錯誤。
例如以下範例會丟出UnsupportedOperationException
錯誤
List<Integer> list = Arrays.asList(1,2,3,4,5);
list.add(6); // 丟出 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<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5));
list.add(6);
參考:
沒有留言:
張貼留言