java.lang.ClassCastException: java.util.Arrays$ArrayList 不能 cast to java.util.ArrayList

2022-08-31 11:22:06

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

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

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


答案 1

Arrays.asList返回一个实现,但它不是 .它碰巧有一个类名 ,但这是一个嵌套类 - 与 完全不同。Listjava.util.ArrayListArrayListArraysjava.util.ArrayList

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

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

如果你不需要 ArrayList,只需删除强制转换:

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

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


答案 2

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

如果将 的类型更改为 ,则不需要此强制转换。sos1ValueList

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

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

推荐