List.addAll在尝试添加其他列表时抛出UnsupportedOperationException

时间:2014-09-02 13:10:49

标签: java

List.addAll在尝试添加其他列表时抛出UnsupportedOperationException

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

在循环中我正在做,

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

从文件中读取 supportTypes

但第2行引发UnsupportedOperationException,但我无法确定原因?

我在列表中添加了另一个列表,那么为什么不支持此操作?

5 个答案:

答案 0 :(得分:78)

Arrays.asList返回由数组支持的固定大小的列表,您无法向其添加元素。

您可以创建可修改的列表以使addAll正常工作:

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

答案 1 :(得分:9)

Arrays.asList返回固定大小的列表。

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

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

答案 2 :(得分:6)

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

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

相反,使用可变列表初始化它。例如

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

答案 3 :(得分:5)

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

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

相关问题:

Arrays.asList() Confusing source code

来自documentation

  

Arrays.asList 返回由指定数组支持的固定大小列表。

答案 4 :(得分:0)

在我的情况下,当我致电adapter.addAll(items)时发生了此异常,其中adapter是自定义ArrayAdapter。此CustomAdapter的参数类型为Array,而不是ArrayList