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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:58:29