List<String> strings = Arrays.asList("1", "2", "3", "4");
List<String> asList = Arrays.asList(sourceQuotationOrderDTO.getHasAgreement().split(","));
asList.retainAll(strings);
代码是这样的
报错在retainAll()方法那一行
调用Arrays.asList()生产的List的add、remove方法时报异常,这是由Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重写了这些方法而Arrays的内部类ArrayList没有重写,所以会抛出异常。解决方法如下:
一:
List<String> asList = Arrays.stream(sourceQuotationOrderDTO.getHasAgreement().split(",")).collect(Collectors.toList());
二:
List<String> list = Arrays.asList(array);
List arrList = new ArrayList(list);
Arrays源码
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
这里new ArrayList是创建的一个内部的ArrayList

AbstractList源码

这篇博客探讨了在Java中使用Arrays.asList()创建List时遇到的问题,即当尝试调用add或remove方法时会抛出UnsupportedOperationException。问题源于Arrays.asList()返回的是Arrays内部类的ArrayList实例,而非java.util.ArrayList。文中提供了两种解决方案:一是使用Arrays.stream()结合Collectors.toList(),二是先将Arrays.asList()转换为java.util.ArrayList。同时,文章还展示了Arrays.asList()和AbstractList的部分源码以帮助理解问题本质。
1347

被折叠的 条评论
为什么被折叠?



