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
键调用它。