首页 > 解决方案 > mutableMap.setValue(...) 函数不再存在?

问题描述

在文档中,我看到我们有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)

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

   val a = mutableMapOf(1 to 1, 2 to 3)
   a.setValue(...) // error out

它不再可用了吗?

标签: kotlincollections

解决方案


这是一个扩展,它实现setValue了类型所需的方法,以便将其用作属性委托。官方文档在这里介绍了如何将 Maps 用作代表:Storing Properties in a Map

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

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

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

val map = mutableMapOf(1 to 1, 2 to 3)
map.set(2, 2)
map[2] = 2

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

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

推荐阅读