Kotlin中如何访问嵌套在另一个Map中的Map的值?
Kotlin嵌套Map取值问题解决
问题出在Kotlin中Map的get方法(即[]操作符)返回的是可空类型。当你执行someCompany["boss"]时,得到的a类型是Map<String, String>?,而非确定的Map<String, String>,所以直接调用a["name"]会报错——可空类型无法直接调用方法或属性。
下面是几种可行的解决方式:
1. 安全调用+默认值(推荐)
用?.安全调用操作符,配合?: Elvis操作符设置默认值,避免空指针风险:
val myOutput = someCompany["boss"]?.get("name") ?: "Unknown" // 或用[]操作符简写 val myOutput = someCompany["boss"]?.["name"] ?: "Unknown"
如果boss不存在或对应的Map里没有name键,myOutput会被设为"Unknown"。
2. 非空断言(谨慎使用)
如果你能确定boss一定存在且是Map类型,可以用!!强制非空,但实际为空时会抛出NullPointerException:
val a = someCompany["boss"]!! val myOutput = a["name"] // 或一步到位 val myOutput = someCompany["boss"]!!["name"]
3. 使用getValue方法
Map的getValue方法会在键不存在时抛出NoSuchElementException,适合你确定键必然存在的场景:
val boss = someCompany.getValue("boss") as Map<String, String> val myOutput = boss.getValue("name")
这里需要显式强转,因为someCompany的value是混合类型(Map和String),getValue返回的是Any类型。
4. 类型检查+作用域函数(更安全)
用as?尝试安全强转,配合let处理非空情况,最后加默认值兜底:
val myOutput = (someCompany["boss"] as? Map<String, String>)?.let { it["name"] } ?: "Unknown"
内容的提问来源于stack exchange,提问作者Henrique Rigitano
相关产品推荐
相关产品推荐

