Элемент приращения в изменяемой карте в Котлине
Я перехожу на Kotlin 1.3 из Scala. Я пытаюсь сделать что-то очень простое:
class Foo {
fun bar() {
val map = mutableMapOf<String, Int>()
val index = "foo"
if (index !in map)
map[index] = 0
else
map[index]!! += 1
}
}
Однако IntelliJ 2020 дает мне ошибку в
+=
оператор, жалуясь, что "ожидаемая переменная", что для меня непрозрачно. Почему я не могу этого сделать? Я перепробовал множество вариантов, но ни один из них не работает. IntelliJ даже предлагает сгенерировать идентичный код, если я оставлю
!!
оператор и выберите
Add non-null asserted (!!) call
из контекстного меню.
1 ответ
Поскольку
operator fun get()
возвращает null, если ключ не существует, вы можете использовать нулевую безопасность вместо проверки if:
val toPut = map[index]?.plus(3) ?: 0
map[index] = toPut
Причина, по которой вы не можете использовать
+
это потому что
operator fun Int.plus()
применимо только к ненулевым
Int
типы. Хотя это выглядит не так уж плохо.