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 类没有重写这些方法,所以会抛出异常。
相关推荐
右耳朵猫AI5 小时前
Java周刊2026W38 | Micronaut 修补三漏洞、JDK 27 提速 54%、Jetty 修复抖动测试
java·后端·spring
事已至此先睡覺吧5 小时前
第二篇:Java 基础语法:变量、数据类型、运算符与类型转换
java
Wang's Blog5 小时前
Java 项目实战: 外卖平台-后台退出功能与首页iframe架构
java·服务器·redis
Wang's Blog5 小时前
Java 项目实战: 外卖平台-软件开发流程与项目整体介绍
java·服务器·redis
她说..5 小时前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
步行cgn5 小时前
BeanFactory 与 FactoryBean 的区别:面试深度解析
java·后端·spring
IT 行者5 小时前
JDK 27 正式发布:内存、安全、并发三路齐发
java
伍一518 小时前
hiprint-spring-boot打印组件介绍
java·hiprint
Wang's Blog13 小时前
Java 接入Redis: 服务启动停止与后台运行配置
java·服务器·redis
此时不提桶,更待何时13 小时前
01-04-B-垃圾回收面试与生产事故实战
java·jvm·面试