期待 ConcurrentModificationException 但得到 UnsupportedException

Expecting ConcurrentModificationException but getting UnsupportedException

我有一份动物清单。我的目标是只从列表中删除狗。怎么做?

我有以下相同的代码

Dog d1= new Dog("Dog 1");
        Dog d2= new Dog("Dog 2");
        Dog d3= new Dog("Dog 3");
        
        Cat c1= new Cat("Cat 1");
        Cat c2= new Cat("Cat 2");
        
        List<Animal> al= Arrays.asList(d1,d2,c1,c2,d3);
        for(Animal eachlist : al)
        {
            if(eachlist instanceof Dog)
            {
                al.remove(eachlist);
            }
            System.out.println(eachlist.toString());
        }

积分

1.I 我期待 al.remove() 抛出 ConcurrentModificationException 但它抛出 UnsoppertedException。为什么? 2. 如何真正从列表中删除所有的狗


这是使用Arrays.asList造成的。这使用了一个有限的 List 实现,它重用了您指定为参数的数组。既然数组不能缩小,这个列表实现也不能。

要获得您期望的异常,请尝试使用不同的 List 实现,例如 ArrayList,例如将您的列表传递给 ArrayList 的构造函数:

List<Animal> al = new ArrayList<>(Arrays.asList(d1,d2,c1,c2,d3));

然后删除狗的所有实例:

al.removeIf(a -> a instanceof Dog);