Kotlin 中的嵌套 属性 委托

Nested property delegation in Kotlin

如官方教程中所述,我们可以store properties in a Map并委托一个class给它:

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

但是,有时我们将非平凡的结构存储在映射中,例如另一个 class(这在处理复杂的 json 时很常见)。为了更好地阐述我的想法,我想出了一个这样的伪代码:

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

class OtherType {}

是否可以委托这样的嵌套结构?

没问题,你可以做到这一点。有效:

fun main(args: Array<String>) {
    val user = User(mapOf("name" to OtherType(1)))
    println(user)
}

data class User(val map: Map<String?, Any?>) {
    val name: String by map
    val otherType: OtherType by map
}

data class OtherType(val something:Int) {}

您可以委托任何类型。