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

Kotlin中MutableMap调用withDefault后仍返回null问题排查

问题根源

withDefault() 配置的默认值不会对[](也就是get()方法)的取值逻辑生效,仅会在调用getValue()方法取不存在的key时触发返回默认值。
Kotlin 中Map的get()方法(即方括号取值的重载方法)语义是固定的:key存在则返回对应值,key不存在则返回null,withDefault()只是给原Map加了一层带默认值的包装,不会修改原有get()方法的逻辑,所以你用["orang"]取值时哪怕配了默认值,还是会拿到null。

修正代码

把不存在key的取值逻辑从方括号调用换成getValue()即可得到预期结果:

val attributes = mutableMapOf<String, Int>().withDefault { 0 }
attributes["orange"] = 345
println(attributes["orange"]) // 输出345,已存在的key用[]取值不受影响
println(attributes.getValue("orang")) // 输出0,不存在的key调用getValue会触发默认值返回
补充说明

如果你就是希望用[]语法取值时,不存在的key直接返回0,不要用withDefault(),可以直接在取值时调用getOrDefault()方法:

println(attributes.getOrDefault("orang", 0)) // 输出0

内容的提问来源于stack exchange,提问作者WISHY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:16:10