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。如下:

java.lang.UnsupportedOperationException.md_第1张图片

Arrays内部类ArrayList内是没有实现addremove,所以调用的时候会抛出java.lang.UnsupportedOperationException,必须使用java.util.ArrayList才行。

#####两者结构

Arrays内部类ArrayList

java.lang.UnsupportedOperationException.md_第2张图片

java.util.ArrayList

java.lang.UnsupportedOperationException.md_第3张图片

java.lang.UnsupportedOperationException.md_第4张图片

你可能感兴趣的:(java)