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
中常用的add
、remove
、set
、get
是没有具体实现的,默认会抛出java.lang.UnsupportedOperationException
。如下:
而Arrays
内部类ArrayList
内是没有实现add
、remove
,所以调用的时候会抛出java.lang.UnsupportedOperationException
,必须使用java.util.ArrayList
才行。
#####两者结构
Arrays
内部类ArrayList
java.util.ArrayList