AddAll 在试图添加另一个列表时抛出 Unsupport tedOperationException

Add在尝试添加另一个列表时抛出 UnsupportedOperationException

List<String> supportedTypes = Arrays.asList("6500", "7600"};

在循环中,

supportedTypes.addAll(Arrays.asList(supportTypes.split(","))); //line 2

从文件读取 Support 类型

但是第2行抛出一个 UnsupportedOperationException,但是我不能确定为什么?

我正在向一个列表添加另一个列表,那么为什么不支持这个操作呢?

48179 次浏览

Arrays.asList返回一个由数组支持的固定大小的列表,您不能向其中添加元素。

您可以创建一个可修改的列表来使 addAll工作:

List<String> supportedTypes = new ArrayList<String>(Arrays.asList("6500", "7600", "8700"));

AsList 返回一个固定大小的列表。

如果希望能够向列表中添加元素,请执行以下操作:

List<String> supportedTypes = new ArrayList<>(Arrays.asList("6500", "7600"});
supportedTypes.addAll(Arrays.asList(supportTypes.split(",")));

问题是 Arrays.asList方法返回 数组数组列表的实例,该实例不支持对元素的添加/删除操作。addAll方法抛出异常并不奇怪,因为 java.util.Arrays.ArrayList的 add 方法定义为:

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

相关问题:

AsList ()混淆源代码

来自 文件:

AsList 返回指定数组支持的固定大小的列表。

使用 Collections.emptyList()初始化列表时也会发生此错误,Collections.emptyList()是不可变的:

List<String> myList = Collections.emptyList();

相反,应该使用一个可变的列表对其进行初始化

List<String> myList = new ArrayList<>();

在我的例子中,这个异常发生在我调用 adapter.addAll(items)时,其中 adapter是一个定制的 ArrayAdapter。这个 CustomAdapter 的参数类型为 Array,而不是 ArrayList