筆記 java

【筆記】java.lang.unsupportedoperationexception: null 錯誤


當使用 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");

  

Reference
Java 為什麼使用Arrays.asList()產生的List物件呼叫add()或remove()時出現UnsupportedOperationException錯誤?
comments powered by Disqus