ошибка при поиске в массиве Kotlin
есть код:
Spark.get("nextUser"){r,_ ->
val roomid = r.queryParams("roomid").toInt()
val room = rooms.find { it.roomid == roomid }!!
val activeUser = room.users.find { it.userid == room.activeUserID }!!
var nextUserIndex = room.users.indexOf(activeUser) + 1
if (nextUserIndex > room.users.size){
nextUserIndex = 0
}
room.activeUserID = room.users[nextUserIndex].userid
}
крашится на этой строке, не могу понять почему:
val activeUser = room.users.find { it.userid == room.activeUserID }!!
Ответы (1 шт):
Вы не приложили код ошибки. Но думаю, что там банальный NullPointerException.
Почему так происходит? Потому что функция find возвращает nulluble результат, т.е. она может не найти элемент, удовлетворяющий предикат и вернуть null.
В вашем случае rooms.find { it.roomid == roomid } может не иметь объекта с нужным вам id.
Вы используете !! это является плохой практикой. Kotlin вам говорит, что переменная может быть null и вам стоило бы обработать ситуацию с null. Можете использовать стандартный способ Java с проверкой на null через if или использовать оператор "Элвис" Котлина ?:.
Когда вы ставите !! вы явно говорите компилятору: "Я уверен, что тут не будет null", но функция find может вернуть null и по факту вы просто игнорируете потенциальную ошибку.