我试图在Kotlin失败中为ConcurrentHashMap添加一个键值。编译器告诉我:No set method providing array access
。
class MysqlDataProviderProxy() {
private val NULL: Any = Object()
var unionMaps: Map<Long, Any> = ConcurrentHashMap()
fun init() {
unionMaps[1] = NULL // No set method providing array access
}
}
我不知道这是什么意思。ConcurrentHashMap在Kotlin中是不可变的吗?
发布于 2022-11-05 16:27:49
就像清洁工说的那样,你在unionMap
上有错误的类型。
在Kotlin中是不可变的ConcurrentHashMap
不是,但与Java /List/Set不同的是,它们具有可变和不变的接口,而接口Map
、List
、Set
是不变的变体。
你想要这个
class MysqlDataProviderProxy() {
private val NULL: Any = Object()
var unionMaps: MutableMap<Long, Any> = ConcurrentHashMap()
init {
unionMaps[1] = NULL
}
}
另一件事是,您的原始函数init()
不会在构造实例时执行,您可能需要init {...
,如我前面所示。
但是,这种方法的问题是,现在您已经使映射在代理类之外是可变的,这可能不是您的意图,在这种情况下您可以这样做:
class MysqlDataProviderProxy() {
private val NULL: Any = Object()
var unionMaps: Map<Long, Any> = ConcurrentHashMap()
init {
(unionMaps as MutableMap)[1] = NULL
}
}
https://stackoverflow.com/questions/74301124
复制相似问题