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<String> supportedTypes = new ArrayList<String>(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”