Делегаты свойств в Kotlin позволяют переложить логику получения и установки значения свойства на отдельный вспомогательный класс, называемый делегатом.
Особенности:
Понимание getValue и setValue: Для свойств доступных для чтения (val) делегат должен иметь метод getValue. Для свойств, доступных для чтения и записи (var), делегат должен иметь как getValue, так и setValue. Эти методы принимают в качестве параметров:
KProperty.Стандартные делегаты: Kotlin поставляется с рядом стандартных делегатов:
lazy: Для отложенной инициализации свойства.observable: Для выполнения некоторого действия при изменении значения свойства.vetoable: Для выполнения некоторого действия при изменении значения свойства, с возможностью отменить изменение.Map.Произвольные делегаты: Можно создавать собственные классы-делегаты. Класс должен реализовывать интерфейсы ReadOnlyProperty (для val) или ReadWriteProperty (для var).
Пример использования lazy:
kotlin
Пример использования observable:
kotlin
Пример пользовательского делегата:
kotlin