List.addAll 在尝试添加另一个列表时抛出 UnsupportedOperationException [重复]

Posted

技术标签:

【中文标题】List.addAll 在尝试添加另一个列表时抛出 UnsupportedOperationException [重复]【英文标题】:List.addAll throwing UnsupportedOperationException when trying to add another list [duplicate] 【发布时间】:2014-10-26 18:28:08 【问题描述】:

List.addAll 在尝试添加另一个列表时抛出 UnsupportedOperationException

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

我正在循环中,

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

从文件中读取supportTypes

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

相反,使用可变列表对其进行初始化。例如

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

【讨论】:

【参考方案3】:

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

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

List&lt;String&gt; supportedTypes = new ArrayList&lt;String&gt;(Arrays.asList("6500", "7600", "8700"));

【讨论】:

@Batty - 这就是问题所在。它不起作用。 asList 的 javadoc 清楚地表明它不起作用。故事结局。您不能将元素添加到使用 asList 创建的列表中。期间。 List 是一个接口,当前实现必须实现它所有的方法,但是那个实现可以抛出一个异常说“这个方法在这里没有意义”【参考方案4】:

问题是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 返回由指定数组支持的固定大小的列表。

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

以上是关于List.addAll 在尝试添加另一个列表时抛出 UnsupportedOperationException [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 在尝试包含/需要包含/需要另一个脚本的脚本时抛出致命错误

Peewee 在尝试添加用户定义的运算符时抛出 KeyError

Nuget 包 - 提要 (VSTS):尝试添加源时抛出异常“System.AggregateException”

SqlDataReader 在尝试将数据加载到 DataGrid WPF 时抛出异常

PHP:包含和需要文件时抛出错误

PHP:包含和需要文件时抛出错误