侧边栏壁纸
  • 累计撰写 32 篇文章
  • 累计创建 38 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Arrays.asList方法转换list调用相关操作抛出UnsupportedOperationException异常

一杯香梨
2022-11-20 / 0 评论 / 0 点赞 / 127 阅读 / 0 字

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

  前端页面报错我以为是空指针,但是想到我的List里面是有值的,而且使用 size() 方法是可以的,按理说不会报空指针。一路追源码下去发现它执行的是AbstractList类的 remove方法,根据文档注释解释,该类的remove和add方法始终会抛出 UnsupportedOperationException异常
640 (1)

  原因就是使用Arrays.asList()出来的是一个Arrays类的内部类,并非直接实例化得到的ArrayList(),而Array 的内部类ArrayList并没有重写add()和remove()这两个方法,因此在我们调用remove()方法时就会执行父类的方法,然后就会抛出 UnsupportedOperationException 图片
640 (2)

  找到原因后解决起来就容易多了,可以将转化得到的List转成常用的ArrayList就可以了

List<String> list = new ArrayList<>(idList);
List<String> list = new ArrarList();
list.addAll(idList);
0

评论区