ArrayList не может быть приведен к java .lang.Object [] - PullRequest
0 голосов
/ 31 марта 2020

Я использовал один из ответов на этот вопрос , чтобы получить справку по предыдущей ошибке, но теперь я получаю другой. Есть предложенный ответ на этот вопрос, но я не могу найти решение для своей проблемы.

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)
}

1 Ответ

0 голосов
/ 31 марта 2020

Нетипизированный data в качестве источника не лучшая идея, но если вы работаете со сторонней библиотекой, у вас может не быть выбора. В этом случае вы можете попробовать следующее:

private var data: Any? = null

@Suppress("UNCHECKED_CAST")
val users: List<User> get() = (data as? ArrayList<Any>)?.filterIsInstance<User>() ?: emptyList()

fun addUser(user: User) {
   @Suppress("UNCHECKED_CAST")
   (data as? ArrayList<Any>)?.add(user)
}

В приведенном выше списке, я предполагаю, что список data может содержать не только пользователей, но и другие объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...