java.lang.UnsupportedOperationException 原因解析

本文深入探讨了在Java中使用Collections.singletonList和Arrays.asList创建List时遇到的add和remove操作限制,解析了SingletonList和ArrayList子类的行为差异及AbstractList方法抛出UnsupportedOperationException的原因。
 List list = Collections.singletonList("1");
 list.remove("1"); //报错 java.lang.UnsupportedOperationException
 list.add("2"); //报错 java.lang.UnsupportedOperationException
String[] ordinaryArray = {"11", "22", "33"};
List list = Arrays.asList(ordinaryArray);
list.remove("11"); //报错 java.lang.UnsupportedOperationException
list.add("44"); //报错 java.lang.UnsupportedOperationException

上面两种方式创建的list在删除和新增的时候都会报错,其他情况也可能会报错,我没有一一尝试;

根本原因是因为这两种方式生成的list都不是java.util.arraylist这种类型;

第一种生成的是Collections.SingletonList;第二种生成的是Arrays.ArrayList;虽然这两种都是list,而且继承于AbstractList;但是都没有重写AbstractList的一些方法,比如add、remove,所以在执行的时候会抛错。其实执行的是AbstractList的方法;以下是AbstractList的一些方法源码。

是不是对这些抛出的异常信息似曾相识。。。

类似这样的list或者方法应该还有,注意下就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值