我查看了delegate上的文档,发现提供了一个map类型的委托:

class MutableUser(val map: MutableMap<String, Any?>) {
    var name: String by map
    var age: Int     by map
}

但我不知道没有delegate的版本有什么不同,比如:

class MutableUser(val map: MutableMap<String, Any?>) {
    var name: String
    var age: Int
}

代表by map的常见用法是什么?

Thanks!

推荐答案

不同之处在于,在第一个使用委托的示例中,您所要做的就是将map放入构造函数并完成.

val user = MutableUser(mutableMapOf(
        "name" to "John Doe",
        "age"  to 25
))

println(user.name) // Prints "John Doe"
println(user.age)  // Prints 25

但是,为了让第二个示例也能这样做,您必须自己实现映射属性的初始化.

class MutableUser(val map: MutableMap<String, Any?>) {
    var name: String
    var age: Int

    init {
        name = map["name"].toString()
        age = map["age"].toString().toInt()
    }
}

One common use case would be implementing a JSON parser.

Kotlin相关问答推荐

Kotlin -通过反射获得KProperty 1和CallableReference的实例

在Kotlin中求n个ClosedRange实例相交的最常用方法是什么?

S使用MAP和ElseThrow的习惯用法是什么?

为什么在jacksonObjectMapper上将DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES设置为false无效?

Kotlin 如何使用其 get 函数在内部检索映射值

使用事务时未调用 Kafka ConsumerInterceptor onCommit

Kotlin 编译器在构造函数中报告未使用的表达式,以便构建器采用 vararg lambda

测试协程和线程之间的差异,我在kotlin中使用线程时无法得到OOM错误

从字符串列表构建字符串

Android 导航组件 - 向上导航打开相同的片段

如何有效地填充 Gradle Kotlin DSL 中的额外属性?

无法解决:androidx.lifecycle:lifecycle-viewmodel-ktx:1.1.1

使用 Kotlin 创建新目录,Mkdir() 不起作用

从 Spring WebFlux 返回 Flux 返回一个字符串而不是 JSON 中的字符串数组

面临一些未知问题一些后端jvm内部错误

如何为kotlin异常生成SerialVersionId?

使用导航组件在BottomNavigationView中传递参数

Java Integer.MAX_VALUE 与 Kotlin Int.MAX_VALUE

我应该使用Kotlin数据类作为JPA实体吗?

带有注释为@RegisterExtension的字段的 JUnit 5 测试在 Kotlin 中不起作用