Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpDlMD 110 of 123 menu
◀ ▶

Свойства из карты в Kotlin

Если данные уже лежат в Map, можно не копировать их в отдельные поля: имя свойства становится ключом карты. Запись val name: String by map читает значение по ключу "name". Для var запись в свойство обновляет карту - карта должна быть изменяемой.

class User(map: Map<String, Any?>) { val name: String by map val age: Int by map } fun main() { val data = mapOf( "name" to "Ann", "age" to 25, ) val user = User(data) println("${user.name} ${user.age}") }

Тип свойства должен совпадать с типом значения в карте, иначе при чтении будет ошибка приведения. Для однородных данных удобнее Map<String, String> или своя data class, но паттерн с Map<String, Any?> часто встречается в конфигах и JSON-подобных структурах.

class Settings(data: MutableMap<String, Any?>) { var theme: String by data var width: Int by data } fun main() { val data = mutableMapOf<String, Any?>( "theme" to "dark", "width" to 800, ) val s = Settings(data) s.width = 1024 println(data["width"]) }

Объявите class Product(data: Map<String, Any?>) со свойствами title и price через by data. Для карты mapOf("title" to "pen", "price" to 10) выведите заголовок.

Объявите class Flags(store: MutableMap<String, Any?>) с var active: Boolean by store. Начальное значение в карте false. Установите active = true и выведите значение ключа "active" из той же карты.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить