跳到主要内容

1 篇博文 含有标签「Map」

查看所有标签

Kotlin 2.4 Map fallback 新 API 实战:用 getOrPutIfNull 和 getOrPutIfMissing 告别手动判空

· 阅读需 6 分钟
重庆 Kotlin User Group

在处理配置、缓存或数据映射时,你一定遇到过这样的场景:从 Map 中获取值,如果不存在就提供默认值。Kotlin 的 getOrDefault() 和 getOrPut() 已经很实用了,但它们都有一个盲区——无法区分"键不存在"和"值为 null"。

来看一个真实的例子:

val config = mutableMapOf<String, String?>(
"username" to "alice",
"theme" to null // 用户明确设置了 theme 为 null
)

// 问题:getOrDefault 无法区分"键不存在"和"值为 null"
val theme1 = config.getOrDefault("theme", "light")
println(theme1) // 输出: light ❌ 错误!用户明确设置了 null,应该保留 null

val theme2 = config.getOrDefault("language", "zh-CN")
println(theme2) // 输出: zh-CN ✅ 正确,键不存在时使用默认值