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或者方法应该还有,注意下就好。
本文深入探讨了在Java中使用Collections.singletonList和Arrays.asList创建List时遇到的add和remove操作限制,解析了SingletonList和ArrayList子类的行为差异及AbstractList方法抛出UnsupportedOperationException的原因。
4万+

被折叠的 条评论
为什么被折叠?



