【问题标题】:List.addAll throwing UnsupportedOperationException when trying to add another list [duplicate]List.addAll 在尝试添加另一个列表时抛出 UnsupportedOperationException [重复]
【发布时间】: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,但我无法确定原因?

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

【问题讨论】:

    标签: java


    【解决方案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(",")));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-10-20
            • 2017-09-29
            • 1970-01-01
            • 1970-01-01
            • 2020-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多