说到 map ,我对Kotlin 的零安全特性感到困惑.我有一个Map<String, String>
.然而,我可以调用map.get(null)
,它返回null
,表示该键不在 map 中.我预计会出现编译器错误,因为map
是Map<String, String>
而不是Map<String?, String>
.我怎么能在String
次辩论中通过null
次呢?
还有一个相关的问题:如果我调用get(null)
,是否有任何类型的映射,无论是stdlib-one还是第三方实现,都可能抛出NullPointerException
?我想知道对于Map
的任何有效实现,调用map.get(s)
而不是s?.let { map.get(it) }
是否安全.
Update
编译器确实返回了一个带有map.get(null)
的错误.但这是not,因为空安全性,但因为文字null
没有向编译器提供所传递参数类型的指示.我的实际代码更像这样:
val map: Map<String, String> = ...
val s: String? = null
val t = map.get(s)
上面的编译很好,返回null
.为什么密钥应该是不可为null的String
?