У меня есть класс A, который необходимо пометить как dirty
каждый раз, когда изменяется одно из его свойств.
После просмотра документов Kotlin я знаю, что мне нужен делегат. Пока у меня есть:
abstract class CanBeDirty {
var isDirty = false
}
class A(
// properties getting set in constructor here
) : CanBeDirty {
var property1: String by DirtyDelegate()
var property2: Int by DirtyDelegate()
var property3: CustomObject by DirtyDelegate()
}
class DirtyDelegate() {
operator fun getValue(thisRef: CanBeDirty, property: KProperty<*>): Resource {
return valueOfTheProperty
}
operator fun setValue(thisRef: CanBeDirty, property: KProperty<*>, value: Any?) {
if (property != value) {
thisRef.isDirty = true
//set the value
}
else {
//don't set the value
}
}
}
Я считаю, что отсутствие настроек как-то связано с vetoable()
, но примеры, которые я вижу в документации Kotlin, мне не показывают как это сделать с полностью сформированным делегатом класса (и, честно говоря, я просто не в курсе синтаксиса Kotlin).