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

新手上路,请多包涵

你能解释一下为什么会这样吗?我该如何解决?

所以我正在使用 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();

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

原文由 SaintLike 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 666
2 个回答

Arrays.asList 返回 List 实现,但它不是 java.util.ArrayList 。它恰好有一个类名 ArrayList ,但这是 --- 中的一个嵌套类 Arraysjava.util.ArrayList -b3d.

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

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

如果您 不需要 ArrayList,只需删除演员表:

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

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

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 4.0 许可协议

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()));

原文由 Eran 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题