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

94

你能解释一下为什么会出现这种情况,以及我应该如何修复它吗?

我正在使用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(); 但仍然出现同样的问题,我该怎么办?

6个回答

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 暴露出来)。


2
为什么不直接将它分配给一个List - TheLostMind
@AlexisC:抱歉,本来就是这样想的 :) - Jon Skeet
你已经添加了它 - List<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue()); :) - TheLostMind
1
@TheLostMind:好的。 - Jon Skeet
new ArrayList<String>( Arrays.asList(new String[] { "hey", "yo"})) 也可以工作。 - absin
显示剩余4条评论

9

Arrays.asList(sos1.getValue());会产生一个列表实现的实例(java.util.Arrays$ArrayList),而不是java.util.ArrayList。因此,您无法将其强制转换为java.util.ArrayList

如果将sos1Value的类型更改为List,则无需进行此转换。

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

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

那我该如何修复它呢? - SaintLike

8
Arrays.asList() 方法返回的 ArrayList 不是 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
    }

-1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接