java.lang.UnsupportedOperationException 异常
程序员文章站
2022-07-15 11:58:41
...
直接代码说事儿
首先这段代码会报错:
package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* @author 作者 Bowen
* @data 创建时间:2019年2月18日 下午5:37:23
* @ClassName test1
* @Description
*
*/
public class test1 {
public static void main(String[] args) {
Integer[] ints = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(ints);
System.out.println("----------------");
list.add(4);
System.out.println(list);
}
}
输出如下:
----------------
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at test.test1.main(test1.java:21)
调用Arrays.asList()生产的List的add、remove方法时报异常,这是由Arrays.asList() 返回的市Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重写了这些方法而Arrays的内部类ArrayList没有重写,所以会抛出异常。解决方法如下:
package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* @author 作者 Bowen
* @data 创建时间:2019年2月18日 下午5:37:23
* @ClassName test1
* @Description
*
*/
public class test1 {
public static void main(String[] args) {
Integer[] ints = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(ints);
// list.add(4);会报错
/**
* list.add(4);会报错
* Arrays.asLisvt() 返回java.util.Arrays$ArrayList,
* 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw
* UnsupportedOperationException而且不作任何操作。ArrayList
* override这些method来对list进行操作,但是Arrays$ArrayList没有override
* remove(int),add(int)等,所以throw UnsupportedOperationException。
*/
System.out.println(list);
List<Integer> aaa = new ArrayList<>(list);
aaa.add(4);//就可以了
System.out.println(aaa);
}
}
输出如下:
[1, 2, 3]
[1, 2, 3, 4]
Arrays.asLisvt() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。