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 strings = Arrays.asList("A", "B", "C");
strings.remove("A"); // 报出 UnsupportedOperationException
}
第一步:打断点
第二步:启动debug模式,(F7)强行进入方法
第三步:走到断点标记处,再次强行进入
最后来到了 AbstractList
抽象类的remove()
结论: 通过 ArrayList.asList() 函数得到的 ArrayList 并不是我们常用的 java.util.ArrayList 而是 Arrays类中一个内部类ArrayList。
public static List asList(T... a) {
return new ArrayList<>(a);
}
private static class ArrayList extends AbstractList
implements RandomAccess, java.io.Serializable
{ ..... }