Делегация вложенного имущества в Котлине - PullRequest
0 голосов
/ 05 марта 2019

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

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 Ответ

0 голосов
/ 05 марта 2019

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

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

Вы можете делегировать любой тип по вашему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...