增加可变映射值会导致可为空的接收器错误
Incrementing the mutable map value results in a nullable receiver error
我是 Kotlin 的新手并尝试 google 它,但我不明白。
此处示例:
https://try.kotlinlang.org/#/UserProjects/q4c23aofcl7lb155oc307cnc5i/sgjm2olo277atiubhu2nn0ikb8
代码:
fun main(args: Array<String>) {
val foo = mutableMapOf('A' to 0, 'C' to 0, 'G' to 0, 'T' to 0)
foo['A'] = foo['A'] + 1
println("$foo['A']")
}
我不明白;为什么索引运算符 return 是可空类型?示例中的地图定义为 Map<Char, Int>
,而不是 Map<Char, Int?>
.
我可以通过非空断言覆盖它,所以这有效:
foo['A'] = foo['A']!!.plus(1)
有没有更简洁的方法?
您可以对任意字符使用索引运算符,即使是那些不属于映射的字符,例如不存在的键。有两个明显的解决方案,要么抛出异常,要么 return null
。正如您在文档中看到的,operator fun get
中的标准库returns null
,索引运算符翻译为:
/**
* Returns the value corresponding to the given [key], or `null` if such a key is not present in the map.
*/
public operator fun get(key: K): V?
备选方案是 getValue
,描述如下:
Returns the value for the given [key] or throws an exception if there is no such key in the map.
这样使用:val v: Int = foo.getValue('A')
我是 Kotlin 的新手并尝试 google 它,但我不明白。
此处示例: https://try.kotlinlang.org/#/UserProjects/q4c23aofcl7lb155oc307cnc5i/sgjm2olo277atiubhu2nn0ikb8
代码:
fun main(args: Array<String>) {
val foo = mutableMapOf('A' to 0, 'C' to 0, 'G' to 0, 'T' to 0)
foo['A'] = foo['A'] + 1
println("$foo['A']")
}
我不明白;为什么索引运算符 return 是可空类型?示例中的地图定义为 Map<Char, Int>
,而不是 Map<Char, Int?>
.
我可以通过非空断言覆盖它,所以这有效:
foo['A'] = foo['A']!!.plus(1)
有没有更简洁的方法?
您可以对任意字符使用索引运算符,即使是那些不属于映射的字符,例如不存在的键。有两个明显的解决方案,要么抛出异常,要么 return null
。正如您在文档中看到的,operator fun get
中的标准库returns null
,索引运算符翻译为:
/** * Returns the value corresponding to the given [key], or `null` if such a key is not present in the map. */ public operator fun get(key: K): V?
备选方案是 getValue
,描述如下:
Returns the value for the given [key] or throws an exception if there is no such key in the map.
这样使用:val v: Int = foo.getValue('A')