1

我从 Scala 来到 Kotlin 1.3。我正在尝试做一些非常简单的事情:

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 给我一个+=操作员错误,抱怨“预期变量”,这对我来说是不透明的。为什么我不能这样做?我尝试了很多变化,但没有一个有效。如果我离开!!运算符并Add non-null asserted (!!) call从上下文菜单中选择,IntelliJ 甚至提供生成相同的代码。

4

1 回答 1

0

由于operator fun get()如果键不存在则返回 null,因此您可以使用 null 安全性而不是 if 检查:

val toPut = map[index]?.plus(3) ?: 0
map[index] = toPut

不能使用的原因+是因为operator fun Int.plus()只适用于非空Int类型。虽然这看起来并没有那么糟糕。

于 2020-11-29T05:47:49.093 回答