Java列表remove() 时报出 UnsupportedOperationException 的错误
Java列表remove() 时报出 UnsupportedOperationException 的错误
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.remove(AbstractCollection.java:293)
......
错误原因 : 该List是一个AbstractList,不支持增删改操作。
问题是在工作时遇到的,源代码就不展示了,模拟一个类似的场景进行DEBUG
@Test
public void test_delete(){
List<String> strings = Arrays.asList("A", "B", "C");
strings.remove("A"); // 报出 UnsupportedOperationException
}
第一步:打断点
第二步:启动debug模式,(F7)强行进入方法
第三步:走到断点标记处,再次强行进入
最后来到了 AbstractList
抽象类的remove()
结论: 通过 ArrayList.asList() 函数得到的 ArrayList 并不是我们常用的 java.util.ArrayList 而是 Arrays类中一个内部类ArrayList。
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{ ..... }
分类:
异常解决
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义