您能解释一下为什么会发生这种情况以及如何解决它吗?
所以我正在使用 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();
但是我一直遇到同样的问题,我该怎么办?
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
暴露任何成员)。
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()));
ArrayList
方法返回的Arrays.asList()
不是java.util.ArrayList
,它是Arrays
类中的静态内部类。因此,您无法将其投射到 java.util.ArrayList
。
尝试将其转换/分配给
List
。
最简单的方法(效率不高)是
ArrayList sos2Value = new ArrayList()
sos2Value.addAll(Arrays.asList(sos1.getValue()))
sos2Value 是 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
}
如果您正在使用 Eclipse IDE,那么只需创建一个包并在该包下创建 java 文件,它就会工作。
java.lang.ClassCastException:java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList
需要将类型设置为java.util.List