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 类没有重写这些方法,所以会抛出异常。
相关推荐
jaysee-sjc3 分钟前
十七、Java 高级技术入门全解:JUnit、反射、注解、动态代理
java·开发语言·算法·junit·intellij-idea
卓怡学长5 分钟前
w1基于springboot高校学生评教系统
java·spring boot·tomcat·maven·intellij-idea
ruan1145145 分钟前
关于HashMap--个人学习记录
java·jvm·servlet
lvyuanj12 分钟前
Java AI开发实战:Spring AI完全指南
java·人工智能·spring
lifallen18 分钟前
如何保证 Kafka 的消息顺序性?
java·大数据·分布式·kafka
Geoking.19 分钟前
后端Long型数据传到前端js后精度丢失的问题(前后端传输踩坑指南)
java·前端·javascript·后端
Seven9727 分钟前
【从0到1构建一个ClaudeAgent】规划与协调-子Agent
java
宠友信息28 分钟前
社交软件源码哪个渠道好
java·微服务·架构·社交电子·springboot·uniapp
improvement...30 分钟前
Maven 编译打包全指南:整体 / 逐个打包 + 核心参数详解
java·maven
_李小白32 分钟前
【OSG学习笔记】Day 41: ReadFileCallback 与 WriteFileCallback(自定义文件读取)
java·笔记·学习