Kotlin 中 Map of Map 中的括号表示法

Die*_*rin 1 hashmap kotlin kotlin-null-safety

在 Kotlin 中,可以对 Map 使用方括号表示法,因此以下代码:

  val mapOfMap: Map<String, Map<String, String>> = mapOf("Key1" to mapOf("Subkey1" to "Value1", "Subkey2" to "Value2"))
  println(mapOfMap["Key1"])
Run Code Online (Sandbox Code Playgroud)

印刷:

{Subkey1=Value1, Subkey2=Value2}
Run Code Online (Sandbox Code Playgroud)

那太棒了。但为什么我不能执行以下操作

println(mapOfMap["Key1"]["Subkey1"])
Run Code Online (Sandbox Code Playgroud)

它会导致编译错误:在 Map 类型的可空接收器上只允许安全 (?.) 或非空断言 (!!.) 调用?

处理这个问题的正确方法是什么?

C-S*_*ark 5

因为mapOfMap["Key1"]可能返回 null,因为它无法猜测所需的键是否在映射中。这和调用是一样的mapOfMap.get("Key1")。第二个映射可以为空,因此它不能调用另一个.get()映射。你可以这样做:mapOfMap["Key1"]?.get("Subkey1")