【发布时间】:2020-07-11 18:37:04
【问题描述】:
我使用了question 中的一个答案来获得有关先前错误的帮助,但现在我又得到了另一个答案。这个问题有一个建议answer,但我无法解决我的问题。
java.lang.ClassCastException: java.util.ArrayList 无法转换为 java.lang.Object[]
private var data: Any? // fixed, can't change data type as it's in a compiled library to accept all kinds of data.
fun users() : ArrayList<User> {
return (data as Array<*>).filterIsInstance<User>() as ArrayList<User>
}
在评论中的建议之后,工作代码看起来像这样,但我有另一个副作用,我无法将项目添加到数组中,ArrayList 保持为空。
fun users() : ArrayList<User> {
return (data as ArrayList<*>).filterIsInstance<User>() as ArrayList<User>
}
fun addItem(userVO: User) {
users().add(user)
}
编辑 2
val users: ArrayList<User> get() = ((data as? ArrayList<Any>)?.filterIsInstance<User>() ?: emptyList()) as ArrayList<User>
fun addItem(user: User) {
users.add(user)
}
【问题讨论】:
-
什么是
data? -
它是
var data: Any?,加入我的问题 -
如果您将
ArrayList存储在data中,为什么要转换为Array? -
你的意思是应该是
return (data as ArrayList<*>).filterIsInstance<User>() as ArrayList<User> -
因为
filterIsInstance返回一个新的ArrayList,您可以在其中添加user
标签: kotlin