Arrays.asList()抛错:UnsupportOperationException

场景:

Arrays.asList();后调用List的add/remove 方法会抛出UnsupportOperationException异常。

 //定义一个字符长度为5的字符串
String[] strings = new String[5];
strings[0] = "a";
strings[1] = "b";
strings[2] = "c";
strings[3] = "d";
strings[4] = "e";

//调用Arrays中的asList方法将String[]转化为List
List<String> list = Arrays.asList(strings);
System.out.println("list:"+list.toString());

//为list添加一个元素,会报错UnsupportOperationException
list.add("f");
System.out.println("list:"+list.toString());

原因:

我们来看一下Arrays.aslist()方法的实现原理,先看此方法的代码:

public static <T> List<T> asList(T... a) {
     
    return new ArrayList<>(a);
}

返回的ArrayList类是工具类的一个静态私有内部类,类的方法包括以下这些:
Arrays.asList()抛错:UnsupportOperationException_第1张图片
Arrays.aslist中,看代码可以看到这里返回的ArrayList不是原来的传统意义上的java.util.arraylist了,而是自己工具类的一个静态私有内部类,并没有提供add方法,要自己实现,所以这里是出错了。
因此,除非确信array.aslist后长度不会增加,否则谨慎使用:List abc=Arrays.asList(“a”,“b”,“c”),因为这样的长度是无法再add的了。

解决方案:

List<String> list2 = new ArrayList<>(list);

你可能感兴趣的:(异常处理,Arrays,Java异常)