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 类没有重写这些方法,所以会抛出异常。
相关推荐
无限的鲜花6 小时前
反射(原创推荐)
java·开发语言
IT二叔6 小时前
Java项目部署-03-teamcity-cicd-docker镜像流水线方式部署
java·ci/cd·持续部署
一路向北he6 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
超级数据查看器7 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
折哥的程序人生 · 物流技术专研8 小时前
《Java 100 天进阶之路》第50篇:阻塞队列与并发容器(2026版)
java·面试题·java进阶·blockingqueue·并发容器·集合源码·java100天进阶
ai_coder_ai8 小时前
编写自动化脚本,在自己后端服务中使用Open Api进行设备相关操作
java·运维·自动化
硕风和炜9 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集
格子软件9 小时前
2026年GEO贴牌代理:分布式多级分账状态机源码深度解构
java·vue.js·分布式·vue·geo
我是一颗柠檬10 小时前
【Java项目技术亮点】加权轮询负载均衡算法
java·算法·负载均衡
灯厂码农10 小时前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法