mutableMap.setValue(...) 函数不再存在?

Ely*_*lye 2 collections kotlin

在文档中,我看到我们有setValue一个 mutableMap。 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/set-value.html

operator fun <V> MutableMap<in String, in V>.setValue(
    thisRef: Any?,
    property: KProperty<*>,
    value: V)
Run Code Online (Sandbox Code Playgroud)

然而当尝试使用它时,它似乎不存在。(我使用的是 Kotlin 1.3)

   val a = mutableMapOf(1 to 1, 2 to 3)
   a.setValue(...) // error out
Run Code Online (Sandbox Code Playgroud)

是不是已经不可用了?

zsm*_*b13 5

这是一个扩展,它实现了setValue类型所需的方法,以便将其用作属性委托。官方文档介绍了如何将地图用作委托:在地图中存储属性

TLDR,您可以使用这种语法,将属性委托给 Map 实例:

class User(val map: Map<String, Any?>) {
    val name: String by map
    val age: Int     by map
}
Run Code Online (Sandbox Code Playgroud)

如果您想简单地设置 a 的值MutableMap,请使用该set方法,也可用作运算[]符:

val map = mutableMapOf(1 to 1, 2 to 3)
map.set(2, 2)
map[2] = 2
Run Code Online (Sandbox Code Playgroud)

或者该put方法,它还返回您修改的键存储的先前值:

val oldValue: Int = map.put(2, 5)
Run Code Online (Sandbox Code Playgroud)