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
相关产品推荐
相关产品推荐

