base

转的:http://xtu-xiaoxin.iteye.com/blog/662935?page=1#comments
在做一个需求的时候,偶然发现Arrays.asList(T... a)这个方法返回的list的removeAll方法总是抛出UnsupportedOperationException异常,但是直接使用ArrayList的对象则能正常运行。

查看源码发现Arrays.asList(T... a)这个方法返回的对象是java.util.Arrays$ArrayList<E>的实例,而并非 java.util.ArrayList<E>的实例。Arrays.asList(T... a)这个方法的源码如下:

public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);// ArrayList<T>是Arrays的内部类。

}

java.util.Arrays$ArrayList的定义如下:

private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;

ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}

...

}

该内部类没有真正实现removeAll()方法,它继承了 java.util.AbstractCollection<E>的removeAll()方法,该方法实际上还是调用remove()方法。java.util.AbstractList<E>的remove()方法如下:

public E remove(int index) {
throw new UnsupportedOperationException();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值