1. 程式人生 > >為什麼Arrays.asList建立的list呼叫add方法拋java.lang.UnsupportedOperationException異常

為什麼Arrays.asList建立的list呼叫add方法拋java.lang.UnsupportedOperationException異常

因為Arrays.asList方法裡的new ArrayList<>(a);的ArrayList是Arrays類裡的一個靜態類class java.util.Arrays$ArrayList,並不是class java.util.ArrayList,且class java.util.Arrays$ArrayList繼承AbstractList<E>沒有覆蓋add(int index, E element)方法,所以呼叫add方法實際上會呼叫AbstractList的add(int index, E element)方法

class java.util.Arrays.asList

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

AbstractList的add(E e)通過AbstractList.this.add(i, e);呼叫public void add(int index, E element)方法

public void add(E e) {
    checkForComodification();

    try {
        int i = cursor;
        AbstractList.this.add(i, e);
        lastRet = -1;
        cursor = i + 1;
        expectedModCount = modCount;
    } catch (IndexOutOfBoundsException ex) {
                throw new ConcurrentModificationException();
    }
}

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}