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

Kotlin mutableMap.setValue(…)函数不再存在?,kotlin,collections,Kotlin,Collections,在文档中,我看到我们有一个可变映射的setValue。 它不再可用了吗?这是一个扩展,它实现了一个类型上所需的setValue方法,以便将其用作。官方文档介绍了如何将地图用作此处的代理: TLDR,您可以使用这种语法,将属性委托给映射实例: class User(val map: Map<String, Any?>) { val name: String by map val age: Int by map } 或方法,该方法还返回由您修改的键存储的上一个

在文档中,我看到我们有一个可变映射的
setValue


它不再可用了吗?

这是一个扩展,它实现了一个类型上所需的
setValue
方法,以便将其用作。官方文档介绍了如何将地图用作此处的代理:

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

class User(val map: Map<String, Any?>) {
    val name: String by map
    val age: Int     by map
}
或方法,该方法还返回由您修改的键存储的上一个值:

val oldValue: Int = map.put(2, 5)

这是一个扩展,它实现了一个类型上所需的
setValue
方法,该类型将用作。官方文档介绍了如何将地图用作此处的代理:

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

class User(val map: Map<String, Any?>) {
    val name: String by map
    val age: Int     by map
}
或方法,该方法还返回由您修改的键存储的上一个值:

val oldValue: Int = map.put(2, 5)

为了进一步说明如何直接使用
setValue
,我在下面创建了一个示例

    data class Something(val boo: String? = null)

    @Test
    fun testSetValue() {
        // Showing auto delegate value of foo, which uses
        // setValue under the hood to extract 1000 for foo
        val foo: Int by mutableMapOf("foo" to 1000)
        println(foo)  // 1000

        // Demonstrating setValue ussage directly setting boo value
        val x = mutableMapOf("abc" to 1)
        x.setValue(null, Something::boo, 200)
        println(x)    // {abc=1, boo=200}

        // Similarly for `getValue`
        println(x.getValue(null, Something::boo) // 200
    }

为了进一步说明如何直接使用
setValue
,我在下面创建了一个示例

    data class Something(val boo: String? = null)

    @Test
    fun testSetValue() {
        // Showing auto delegate value of foo, which uses
        // setValue under the hood to extract 1000 for foo
        val foo: Int by mutableMapOf("foo" to 1000)
        println(foo)  // 1000

        // Demonstrating setValue ussage directly setting boo value
        val x = mutableMapOf("abc" to 1)
        x.setValue(null, Something::boo, 200)
        println(x)    // {abc=1, boo=200}

        // Similarly for `getValue`
        println(x.getValue(null, Something::boo) // 200
    }

错误表明
setValue
扩展是为
MutableMap
提供的,即可以使用
字符串
键的映射。您正在使用
Int
键在映射上调用它。错误表明
setValue
扩展是为
MutableMap
提供的,即可以使用
String
键的映射。你在地图上用
Int
键调用它。