Делегация вложенного имущества в Котлине
Как упоминалось в официальном руководстве, мы можем хранить свойства на карте и делегировать ей класс:
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) {}
Вы можете делегировать любой тип, который вы хотите.