Kotlin中HashMap使用apply或also未达预期效果的原因咨询
问题原因分析与修正方案
这是个非常典型的Kotlin语法小误区!咱们一步步拆解问题出在哪:
核心问题:KEY to ANOTHER_VALUE只是创建键值对,而非插入操作
你写的KEY to ANOTHER_VALUE本质上只是调用了Kotlin标准库函数,生成了一个Pair<String, String>对象,但这个对象并没有被关联到你的HashMap上——相当于你只是造了个键值对,但没把它放进map容器里,所以原HashMap自然不会有任何变化。
针对apply的修正
apply函数的lambda中,this指向的就是调用它的HashMap实例,你需要主动调用HashMap的修改方法来插入条目:
fun getParamsUsingApply(): HashMap<String, String> { return getBasicParams().apply { // 两种写法都可行: this[KEY] = ANOTHER_VALUE // 或者 put(KEY, ANOTHER_VALUE) } }
针对also的修正
also函数的lambda中,是通过it来引用原HashMap实例的,所以修改方式要换成it调用:
fun getParamsUsingAlso(): HashMap<String, String> { return getBasicParams().also { // 两种写法都可行: it[KEY] = ANOTHER_VALUE // 或者 it.put(KEY, ANOTHER_VALUE) } }
补充说明
apply和also的核心区别只是lambda内部引用对象的方式(this vs it),但它们都不会自动帮你执行“插入键值对”的操作——你必须明确调用HashMap的赋值运算符或者put方法,才能真正把新条目添加进去。
内容的提问来源于stack exchange,提问作者AndroidEnthusiast
相关产品推荐
相关产品推荐

