Java操作ArrayList添加元素抛出UnsupportedOrderException原因求解
异常根本原因
你提到的异常实际为UnsupportedOperationException,该异常和克隆逻辑完全无关,在你调用add方法时就已经触发,核心问题出在Arrays.asList()的返回值特性上:
Arrays.asList()返回的不是我们常用的java.util.ArrayList,而是Arrays类内置的静态私有类ArrayList,该类仅提供数组转列表的视图能力,没有实现add、remove这类修改列表结构的方法,直接继承的AbstractList类的对应方法默认实现就是抛出UnsupportedOperationException。- 该返回列表仅支持查看、修改已有索引位的元素值,不支持增删元素等变更列表结构的操作。
修复方法
如果需要得到可正常增删的普通ArrayList,把Arrays.asList()的返回值传入ArrayList的构造方法即可:
List<Integer> klist= new ArrayList<>(Arrays.asList(10,20,30,40,50));
修改后add操作可以正常执行,后续的浅克隆逻辑也能正常运行。
浅克隆逻辑补充说明
你当前写的clone()是默认的浅克隆实现,克隆得到的m2对象的list成员和m1的list会指向同一个列表实例,任意一方修改列表的元素(增删、修改元素值)都会同步影响另一方。如果需要实现列表的独立拷贝,可以修改clone()方法单独处理列表的克隆:
@Override public Object clone() throws CloneNotSupportedException { Mine cloned = (Mine) super.clone(); cloned.list = new ArrayList<>(this.list); return cloned; }
内容的提问来源于stack exchange,提问作者man123
相关产品推荐
相关产品推荐

