為什麼Arrays.asList建立的list呼叫add方法拋java.lang.UnsupportedOperationException異常
阿新 • • 發佈:2019-01-08
因為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(); }