【问题标题】:Kotlin, when to delegate by map?Kotlin,何时通过地图委托?
【发布时间】:2017-01-13 07:47:21
【问题描述】:

我查看了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的常见用法是什么?

谢谢!

【问题讨论】:

    标签: delegates kotlin


    【解决方案1】:

    不同的是,在第一个带委托的例子中,你所要做的就是把map放到构造函数中就可以了。

    val user = MutableUser(mutableMapOf(
            "name" to "John Doe",
            "age"  to 25
    ))
    
    println(user.name) // Prints "John Doe"
    println(user.age)  // Prints 25
    

    但要使第二个示例同样适用,您必须自己从 map 中实现属性的初始化。

    class MutableUser(val map: MutableMap<String, Any?>) {
        var name: String
        var age: Int
    
        init {
            name = map["name"].toString()
            age = map["age"].toString().toInt()
        }
    }
    

    一个常见的用例是实现 JSON 解析器。

    【讨论】:

    • 反之亦然 - 当您修改 name 时,地图也会相应修改
    猜你喜欢
    • 2019-09-08
    • 2016-08-04
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2019-09-21
    • 2018-05-07
    相关资源
    最近更新 更多