【问题标题】:java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayListjava.lang.ClassCastException:java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList
【发布时间】:2015-03-04 10:08:50
【问题描述】:

您能解释一下为什么会发生这种情况,我该如何解决?

所以我使用的是 Oracle-ADF,我使用的是穿梭组件。我使用sos1.getValue(); 获取选定的值

getValue() 方法返回一个对象,我正在尝试将其转换为 ArrayList,以便以后使用它。因此我创建了ArrayList sos1Value

但是,这行代码很糟糕:

sos1Value = (ArrayList) Arrays.asList(sos1.getValue());

我不断收到java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

我尝试过其他方式,例如:sos1Value = (ArrayList) sos1.getValue();

但我一直遇到同样的问题,我该怎么办?

【问题讨论】:

    标签: java arraylist casting


    【解决方案1】:

    Arrays.asList 返回一个List 实现,但它不是java.util.ArrayList。它恰好有一个类名ArrayList,但这是Arrays 中的一个嵌套类——与java.util.ArrayList 完全不同。

    如果您需要java.util.ArrayList,您可以创建一个副本:

    ArrayList<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue()); 
    

    或:

    List<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue())); 
    

    (如果您不需要任何由ArrayList 公开的成员)。

    【讨论】:

    • 为什么不直接将其分配给List?。
    • @AlexisC.: 抱歉,我是故意的 :)
    • @TheLostMind:不确定你的意思 - list 的声明类型?
    • 你已经添加了它 - List&lt;Foo&gt; list = new ArrayList&lt;&gt;(Arrays.asList(sos1.getValue()); :)
    • @TheLostMind: Righto.
    【解决方案2】:

    Arrays.asList(sos1.getValue()); 生成不是 java.util.ArrayList 的 List 实现 (java.util.Arrays$ArrayList) 的实例。因此,您不能将其转换为 java.util.ArrayList

    如果您将sos1Value 的类型更改为List,则不需要此演员表。

    如果你必须有java.util.ArrayList的实例,你可以自己创建:

    sos1Value = new ArrayList (Arrays.asList(sos1.getValue()));
    

    【讨论】:

    • 那我该如何解决呢?
    【解决方案3】:

    Arrays.asList() 方法返回的ArrayList 不是java.util.ArrayList,它是Arrays 类中的静态内部类。因此,您不能将其转换为 java.util.ArrayList

    尝试将其转换/分配给List

    【讨论】:

      【解决方案4】:

      简单的方法(效率不高)是

      ArrayList sos2Value = new ArrayList()
      sos2Value.addAll(Arrays.asList(sos1.getValue()))
      

      sos2Value 是 java.util.ArrayList。
      Arrays.asList(sos1.getValue()) 是 java.util.Arrays$ArrayList

      但我不清楚你想做什么。

      【讨论】:

        【解决方案5】:

        java.lang.ClassCastException: java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList

        需要将类型设置为java.util.List

        【讨论】:

          猜你喜欢
          • 2017-03-13
          • 2017-10-29
          • 2014-03-16
          • 2023-04-07
          • 2020-06-17
          • 2015-07-16
          • 1970-01-01
          • 2020-05-15
          • 1970-01-01
          相关资源
          最近更新 更多