Arrays.asList()的add和remove方法抛出UnsupportedOperationException

Sat Sep 05 10:22:40 CST 2015 1164 Java

文章摘要在使用由Arrays.asList()生成的列表的add和remove方法时,抛出了UnsupportedOperationException异常。这是什么原因呢?

一次使用Arrays.asList()方法将一个数组转换为List,然后从其中剔除不符合要求的元素时,发现调用这个List的remove方法会抛出UnsupportedOperationException异常。


查看源代码发现,Arrays.asList()返回的ArrayList并不是java.util包下的ArrayList(java.util.ArrayList),而是Arrays类的内部类(Arrays.ArrayList)


这个内部类ArrayList继承了java.util.AbstractList,而java.util.AbstractList继承了java.util.AbstractCollection并实现了java.util.List。但是AbstractList是这么实现List的add()和remove()方法的:

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}


public E remove(int index) {
    throw new UnsupportedOperationException();
}

而Arrays.ArrayList并没有重写java.util.AbstractList里的add()和remove(),所有当你调用由Arrays.asList()得到的List的add()和remove()方法,就相当于调用了java.util.AbstractList的add()和remove()方法,于是总会抛出UnsupportedOperationException异常。


解决办法就是,绕过这种方法。当你需要使用add和remove的时候,就不要这么转化数组为List了。


打赏
打赏

分享到: