You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:15:34