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

问题描述 投票:0回答:7

您能解释一下为什么会发生这种情况以及如何解决它吗?

所以我正在使用 Oracle-ADF,并且我正在使用 Shuttle 组件。我使用

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
7个回答
142
投票

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

如果您需要一个

java.util.ArrayList
,您可以创建一个副本:

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

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

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

(如果您不需要仅通过

ArrayList
暴露任何成员)。


9
投票

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

如果将

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

如果您必须拥有

java.util.ArrayList
的实例,您可以自己创建它:

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

8
投票

ArrayList
方法返回的
Arrays.asList()
不是
java.util.ArrayList
,它是
Arrays
类中的静态内部类。因此,您无法将其投射到
java.util.ArrayList

尝试将其转换/分配给

List


1
投票

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

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

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

但我不清楚你想做什么。


0
投票

我是这样使用的:

 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
    }

0
投票

如果您正在使用 Eclipse IDE,那么只需创建一个包并在该包下创建 java 文件,它就会工作。


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.