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

Kotlin中无法向ConcurrentHashMap存入键值对,报错无数组访问set方法

问题原因及解决方案

你遇到的报错是因为变量unionMaps的类型被声明为Kotlin的只读Map接口,而只读Map没有提供下标赋值([]=)的方法——哪怕你实际赋值的是可变的ConcurrentHashMap实例,编译器也只会按照声明的类型来检查允许的操作。

ConcurrentHashMap本身是可变的,问题出在你的类型声明上,而非ConcurrentHashMap本身不可变。

解决方法

有两种修改方式:

方式一:将类型声明为MutableMap

MutableMap是Kotlin提供的可变映射接口,支持put和下标赋值操作:

class MysqlDataProviderProxy() {
    private val NULL: Any = Object()
    var unionMaps: MutableMap<Long, Any> = ConcurrentHashMap()

    fun init() {
        unionMaps[1] = NULL // 现在可以正常赋值
    }
}

方式二:直接声明为ConcurrentHashMap类型

如果需要直接使用ConcurrentHashMap的特有方法,也可以直接把变量类型指定为ConcurrentHashMap:

class MysqlDataProviderProxy() {
    private val NULL: Any = Object()
    var unionMaps: ConcurrentHashMap<Long, Any> = ConcurrentHashMap()

    fun init() {
        unionMaps[1] = NULL // 正常赋值
    }
}

简单来说,Kotlin区分只读Map和可变MutableMap,你之前用了只读的Map类型,导致无法执行修改操作,换为可变类型即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:45:49