1. 程式人生 > >java.lang.UnsupportedOperationException.md

java.lang.UnsupportedOperationException.md

java.lang.UnsupportedOperationException

遇到這個異常,原因多半是將Arrays.asList()當成java.util.ArrayList使用了,並且呼叫了add或者remove的方法,如

List list = Arrays.asList(123, 456);
list.add(789);

解決方法:只要將Arrays.asList()替換成java.util.ArrayList使用即可解決問題。如下:

List list = new ArrayList(Arrays.asList(123, 456));
list.add(789);
說明

Arrays.asList()

返回的雖然也是ArrayList,但卻是Arrays內定義的內部類,和java.util.ArrayList是兩個不同的類。

Arrays內部類ArrayList java.util.ArrayList
繼承自 AbstractList ,實現 RandomAccess,java.io.Serializable 繼承自 AbstractList ,實現 RandomAccess,java.io.Serializable,並且實現了List, Cloneable
實現了set、get 方法 實現了add、remove、set、get 方法

兩者都是繼承java.uitl.AbstractList

,在java.uitl.AbstractList中常用的addremovesetget是沒有具體實現的,預設會丟擲java.lang.UnsupportedOperationException。如下:

在這裡插入圖片描述

Arrays內部類ArrayList內是沒有實現addremove,所以呼叫的時候會丟擲java.lang.UnsupportedOperationException,必須使用java.util.ArrayList才行。

#####兩者結構

Arrays內部類ArrayList

在這裡插入圖片描述

java.util.ArrayList

在這裡插入圖片描述

在這裡插入圖片描述