Делегация вложенного имущества в Котлине

Как упоминалось в официальном руководстве, мы можем хранить свойства на карте и делегировать ей класс:

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

Однако иногда мы храним на карте нетривиальные структуры, как в другом классе (это обычно при работе со сложными jsons). Чтобы лучше проработать мою идею, я придумал такой псевдокод:

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

class OtherType {}

Можно ли делегировать такую ​​вложенную структуру?

1 ответ

Решение

Нет проблем, вы можете сделать это. Оно работает:

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) {}

Вы можете делегировать любой тип, который вы хотите.

Другие вопросы по тегам