Arrays.asList()操作的异常问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41751625/article/details/79945398

    先来一段代码,引出一个问题。

    

public class Test {
    public static void main(String[] args) {
        List list1= Arrays.asList(1,2);
        List list2=Arrays.asList(1,2,3,4);
        list2.removeAll(list1);

    }
}

那么这段代码运行之后,会抛出一个异常

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.remove(AbstractList.java:161)
	at java.util.AbstractList$Itr.remove(AbstractList.java:374)
	at java.util.AbstractCollection.removeAll(AbstractCollection.java:373)
	at Test.main(Test.java:17)

为什么会报这个错,误呢,其实要说明这个问题就得从源码来说起了。其实Arrays.asList其实返回的并不是我们所熟知的ArrayList,而是Arrays内部的一个自己定义的一个ArrayList,它和我们平常使用的ArrayList一样都继承 了AbstractList接口,在AbstractList中,默认remove就是会抛出一个异常,不做其他任何的处理。

public E remove(int index) {
        throw new UnsupportedOperationException();
    }
因为我们的ArrayList重写了这个remove方法,而Arrays内部的ArrayList并没有重写这个方法,所以会调用父类的这个方法也就直接抛出了一个异常了。

猜你喜欢

转载自blog.csdn.net/weixin_41751625/article/details/79945398