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

Sai*_*ike 44 java casting arraylist

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

所以我使用的是Oracle-ADF,我正在使用穿梭组件.我使用了获得所选的值sos1.getValue();

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

但是,这行代码是香蕉:

sos1Value = (ArrayList) Arrays.asList(sos1.getValue());
Run Code Online (Sandbox Code Playgroud)

我一直都有 java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

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

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

Jon*_*eet 84

Arrays.asList返回一个List实现,但它不是一个java.util.ArrayList.碰巧有一个类名ArrayList,但这是一个嵌套类Arrays- 一个完全不同的类型java.util.ArrayList.

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

ArrayList<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue()); 
Run Code Online (Sandbox Code Playgroud)

要么:

List<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue())); 
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不直接将它分配给`List`? (2认同)

Era*_*ran 7

Arrays.asList(sos1.getValue());生成一个java.util.Arrays$ArrayList不是java.util.ArrayList 的List实现()实例.因此你不能把它投射到java.util.ArrayList.

如果更改为的类型,则不需要此类型sos1Value转换List.

如果您必须有一个实例java.util.ArrayList,您可以自己创建:

sos1Value = new ArrayList (Arrays.asList(sos1.getValue()));
Run Code Online (Sandbox Code Playgroud)


The*_*ind 5

ArrayList由归国Arrays.asList()方法不是java.util.ArrayList它是一个静态内部类内部Arrays类.所以,你不能把它投射到java.util.ArrayList.

尝试将其转换/分配给List.