java.lang.UnsupportedOperationException解决方法

java.lang.UnsupportedOperationException解决方法

先放错误信息

业务场景

已知有学生 张三李四王五赵六 等人
private List<String> nameList = Arrays.asList("张三", "李四", "王五", "赵六");

现有一名考生 如考试分数大于等于80分 即编入该班级
if (score >= 80) { nameList.add("七七"); }

报错分析

先看报错代码位置

在类 MainActivity 中的第32行代码,OK,咱们进入源码查看

进入源码查看

先看 Arrays.asList 方法,可以看到这里返回值是new了一个 ArrayList ,但此 ArrayList 是Arrays类本身的内部类,通过查找发现此类中并没有add方法,那么咱们可以看到此 ArrayList 类继承了 AbstractList ,咱们进入 AbstractList 类查看即可找到原因

通过查找发现此类中并没有add方法

进入 AbstractList 类查看,可以看到该方法会抛此异常

至此 真相大白

此时咱们进入 ArrayList 源码中查看,可以看出是重写了add方法,至此 真相大白

解决方法

既然已知原因,只需类型转换即可
private List<String> nameList = new ArrayList<>(Arrays.asList("张三","李四","王五","赵六"));

总结

  • 在使用 Arrays.asList() 方法生成的 List 中的 add()、remove() 等方法时运行报异常,这是由于 Arrays.asList() 返回的是 Arrays 本身的内部ArrayList类,而不是 java.util.ArrayList 类。
  • Arrays 的内部类 ArrayList 和 java.util.ArrayList 虽然都是继承 AbstractList,但 java.util.ArrayList 重写了这些方法而 Arrays 的内部ArrayList 类没有重写这些方法,所以会抛出异常。
相关推荐
Nice__J3 分钟前
ISO26262功能安全——SafeOS
java·linux·安全
夹芯饼干19 分钟前
虚拟机指令第六节
java·linux·服务器
A_aspectJ1 小时前
【Java基础开发】基于 Java Swing +MySQL + JDBC 版实现图书管理系统
java·开发语言·mysql
TE-茶叶蛋1 小时前
Spring最核心扩展点:BeanPostProcessor
java·后端·spring
Mr.45671 小时前
SpringBoot多模块依赖冲突排查与架构优化实战(避坑指南)
java·spring boot·架构
学术阿凡提1 小时前
Spring Boot 优雅实现异步调用:从入门到自定义线程池与异常处理
java·数据库·算法
我是无敌小恐龙1 小时前
Java SE 零基础入门Day06 方法重载+Debug调试+String字符串全套API详解(超全干货)
java·开发语言·人工智能·python·transformer·无人机·量子计算
xiaoye37081 小时前
java接口文档工具 swagger2和swagger3对比
java·服务器·前端
三维频道1 小时前
工业级三维扫描实测:汽车灯具复杂结构件的全尺寸 3D 测量方案分析
java·人工智能·python·数码相机·3d·汽车·汽车轻量化制造
tongyiixiaohuang1 小时前
基于轻易云的数据集成,实现企业系统间灵活对接
java·前端·数据库