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

Делегат observable в Kotlin

Функция Delegates.observable из kotlin.properties оборачивает var: при каждой успешной записи вызывается лямбда с тремя аргументами - свойство, старое и новое значение. Так отслеживают изменения без ручного вызова обработчика в каждом сеттере.

import kotlin.properties.Delegates class Account { var balance: Int by Delegates.observable(0) { _, old, new -> println("$old -> $new") } } fun main() { val acc = Account() acc.balance = 100 acc.balance = 150 }

Первый аргумент лямбды - KProperty; имя свойства доступно как property.name, если нужно общее сообщение для нескольких полей.

Функция observable срабатывает после присваивания. Чтобы отменить недопустимое значение до записи, в стандартной библиотеке есть vetoable - в этом разделе достаточно observable.

Объявите class Label. Объявите в нём свойство var text: String by Delegates.observable("") { _, _, new -> println(new.length) }. Присвойте свойству строки "ab" и "abcd".

Объявите class Meter. Объявите свойство var units: Int by Delegates.observable(0) { _, old, new -> if (new < old) println("down") }. Задайте units значения 10, затем 5, затем 8. На экран должна появиться одна строка down.

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