Property delegation в Kotlin позволяет тебе отделить логику get и set свойства от самого свойства, передав её объекту-делегату, что делает код чище и переиспользуемым.
Чтобы создать пользовательский делегат, реализуй один из следующих интерфейсов из kotlin.properties:
ReadOnlyProperty — предоставляет getValue() для val-свойствReadWriteProperty — предоставляет оба метода getValue() и setValue() для var-свойствДелегат получает владельца свойства и метаданные свойства (KProperty) как параметры в каждом методе.
Стандартная библиотека Kotlin включает несколько готовых делегатов:
lazy — вычисляет значение один раз при первом обращении и кэширует егоDelegates.observable — вызывает колбэк после каждого изменения значенияDelegates.vetoable — вызывает колбэк перед изменением, позволяя тебе его отклонитьmap — хранит значения свойств внутри Map, полезно для динамических данных или JSON-подобных структур// Вычисляется один раз, при первом обращении
val name: String by lazy { computeName() }
// Уведомляет при каждом изменении
var status: String by Delegates.observable("initial") { _, old, new ->
println("Changed from $old to $new")
}
Property delegation способствует разделению ответственности, выделяя повторяющиеся паттерны — такие как ленивая инициализация, отслеживание изменений или валидация — в переиспользуемые классы делегатов. Это снижает количество boilerplate-кода и делает свойства проще тестировать и поддерживать.
Интерфейс ReadOnlyProperty требует реализации обоих методов getValue() и setValue() для поддержки делегирования val свойств.
Новый — ещё не проверен сообществом
Вы