java.lang.UnsupportedOperationException报错如何解决

1、遇到的问题

今天遇到了个十分坑人的玩意
使用Arrays.asList()方法转化数组后,再对list进行remove()、add()操作的时候常常会发生UnsupportedOperationException异常

 2、出现问题代码及原因

//把查询出来的姓名拆分后过滤
List nameList = Arrays.asList(selectNameList.split(","));
//将姓张的人员去除
nameList.removeIf(o -> o.startsWith("张"));

这时候就会出现报错

java.lang.UnsupportedOperationException报错如何解决_第1张图片

 出现问题的原因:Arrays.asList()方法转化成ArrayList后,方法返回的List对象不是我们常见的ArrayList,而是Arrays的一个内部类,两个ArrayList,都是继承 AbstractList,这就是最坑的地方了。Arrays的内部类ArrayList没有重写 AbstractList的add和remove方法,再去看AbstractList的add和remove方法,是直接抛出异常 java.lang.UnsupportedOperationException,没有任何处理。这就导致上面这种方法生成的Arrays的ArrayList使用add或者remove方法会直接抛出异常。

3、如何解决 

既然不是我们常见的ArrayList,那我们就转换一下

List nameList = new ArrayList<>(Arrays.asList(selectNameList.split(","));
nameList.removeIf(o -> o.startsWith("张"));

这样问题就顺利解决啦~

你可能感兴趣的:(Java,java)