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

Bat*_*tty 39 java

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

List<String> supportedTypes = Arrays.asList("6500", "7600"};
Run Code Online (Sandbox Code Playgroud)

我在做循环

supportedTypes.addAll(Arrays.asList(supportTypes.split(","))); //line 2
Run Code Online (Sandbox Code Playgroud)

从文件中读取supportTypes.

但第2行抛出了UnsupportedOperationException,但我无法确定原因?

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

Era*_*ran 88

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

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

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

  • List是一个接口,当前的实现必须实现其所有方法,但是该实现会引发异常,以表明“此方法在这里没有意义” (2认同)

Jea*_*art 9

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

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

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


Sur*_*gch 7

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

List<String> myList = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)

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

List<String> myList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)


bsi*_*nau 5

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

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}
Run Code Online (Sandbox Code Playgroud)

相关问题:

Arrays.asList()令人困惑的源代码

文档:

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