Как можно присвоить значение присваивания _id в Котлин?

Код 1 – пример кода с веб-страницы. Чтобы упростить вопрос, я делаю код 2

В Code 2 snippet var _id: Long by map заставляет меня запутаться, карта val – MutableMap<String, Any?> И _id Long , почему карта может присваивать значение _id?

Код 1

 class CityForecast(val map: MutableMap<String, Any?>, val dailyForecast: List<DayForecast>) { var _id: Long by map var city: String by map var country: String by map constructor(id: Long, city: String, country: String, dailyForecast: List<DayForecast>) : this(HashMap(), dailyForecast) { this._id = id this.city = city this.country = country } } 

Код 2

 class CityForecast(val map: MutableMap<String, Any?>, val dailyForecast: List<DayForecast>) { var _id: Long by map var city: String by map var country: String by map } 

Для Гжегожа Пивоварека , является ли код 3 правильным?

Код 3

 val map: MutableMap<String, Any?> var _id: Long by map map=hashMapOf("_id" to 123) println(_id) 

Solutions Collecting From Web of "Как можно присвоить значение присваивания _id в Котлин?"

Потому что это одна из особенностей языка – делегированные свойства.

Kotlin по умолчанию не раскрывает поля классов, но свойства, которые обычно поддерживаются полями, но могут быть скопированы … на карте.

 val id = CityForecast(hashMapOf("_id" to 123), emptyList())._id println(id) // 123 

но если вы попытаетесь запустить:

 CityForecast(hashMapOf("_id" to 123), emptyList()).city 

ты получишь:

 java.util.NoSuchElementException: Key city is missing in the map.