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

java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

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

所以我正在使用 Oracle-ADF 并且正在使用穿梭组件。我使用 sos1.getValue();

获取选定的值

getValue() 方法 returns 一个对象,我正在尝试将其转换为 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();

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

Arrays.asList(sos1.getValue()); 生成一个不是 java.util.ArrayList 的列表实现 (java.util.Arrays$ArrayList) 的实例。因此你不能将它转换为 java.util.ArrayList.

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

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

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

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

尝试将其转换/分配给 List

Arrays.asList returns List 实现,但不是 java.util.ArrayList。它恰好有一个 ArrayList 的 class 名称,但这是 Arrays 中的嵌套 class - 与 java.util.ArrayList.

完全不同的类型

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

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

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

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

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

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

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

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

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

sos2 值为 java.util.ArrayList。
Arrays.asList(sos1.getValue()) 是 java.util.Arrays$ArrayList

但是我不清楚你想做什么。

我是这样使用的:

 private fun getArtists(): ArrayList<ArtistItem> {
        var xp = myDb.daoNote().getArtists() as ArrayList<ArtistItem>
        val x: List<ArtistItem> =  xp.sortedWith(compareBy { it.isBookmarked})
        var pp = ArrayList<ArtistItem>()
        for(obj in x)
        {
            pp.add(obj)
        }

     return pp
    }