分析:
本人废话太多没耐心的小伙伴点后面,解决方案。
项目中对一个List进行removeAll的时候抛出了java.lang.UnsupportedOperationException异常,追溯日志发现这个错误是在AbstractList.java:161这里抛出,看到这里发现这方法默认throw UnsupportedOperationException而且不作任何操作,那异常原因就是没有重写方法。而我们用的ArrayList、LinkedList都是继承这个类的,并且重写了这个方法的。那么问题的矛头就直指这个进行removeAll的List到底是什么身份来的!几经翻找,发现项目中这个List是由Arrays.asList() 返回的,话不多说查看他的源码如下:
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
/**
* @serial include
*/
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) {
a = Objects.requireNonNull(array);
}
@Override