使用 Arrays.asList 抛出 java.lang.UnsupportedOperationException
Posted owczhlol
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Arrays.asList 抛出 java.lang.UnsupportedOperationException相关的知识,希望对你有一定的参考价值。
今天在复习可变与不可变的时候写了一个小demo进行测试,主要是打算测试一下函数对参数的直接修改。但是运行的时候却发现抛出了java.lang.UnsupportedOperationException这个异常。
出错位置:
public class ListTest { public static void main(String[] args) { List<Integer> list = Arrays.asList(1,2,3); list.add(4); } }
查阅了一下资料,发现Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList,而这两者又都继承了AbstractList,在AbstractList中add方法是直接默认抛出java.lang.UnsupportedOperationException这个异常的,java.util.ArrayList重写了这个方法,所以使用时不会抛出异常,但是Arrays的内部类就没有重写这个方法。
解决方案也很简单,把aslist生成的list用ArrayList重新生成一次就好了,如下
public class ListTest { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3); List mylist = new ArrayList(list); mylist.add(4); } }
以上是关于使用 Arrays.asList 抛出 java.lang.UnsupportedOperationException的主要内容,如果未能解决你的问题,请参考以下文章
Java集合 -- 疑难点总结(Arrays.asList()正确使用Collection.toArray()正确使用反转数组 foreach 循环不要进行元素的 remove/add 操作)