今天在工作中在使用 Arrays.asList() 方法将一个字符数组转换成List后调用 clear() 方法时,莫名其妙的抛出了 UnsupportedOperationException 异常

前端页面报错我以为是空指针,但是想到我的List里面是有值的,而且使用 size() 方法是可以的,按理说不会报空指针。一路追源码下去发现它执行的是AbstractList类的 remove方法,根据文档注释解释,该类的remove和add方法始终会抛出 UnsupportedOperationException异常
原因就是使用Arrays.asList()出来的是一个Arrays类的内部类,并非直接实例化得到的ArrayList(),而Array 的内部类ArrayList并没有重写add()和remove()这两个方法,因此在我们调用remove()方法时就会执行父类的方法,然后就会抛出 UnsupportedOperationException 图片
找到原因后解决起来就容易多了,可以将转化得到的List转成常用的ArrayList就可以了
List<String> list = new ArrayList<>(idList);
List<String> list = new ArrarList();
list.addAll(idList);
评论区