vetoable
Начиная с Kotlin: 1.0
inline fun <T> vetoable(initialValue: T, crossinline onChange: (property: KProperty<*>, oldValue: T, newValue: T) -> Boolean): ReadWriteProperty<Any?, T>
Возвращает делегат свойства для свойства, доступного для чтения и записи, который при изменении вызывает указанную функцию обратного вызова, позволяя ей отменить изменение.
Параметры
начальное значение свойства.
функция обратного вызова, которая вызывается перед попыткой изменить значение свойства. На момент вызова этой функции значение свойства ещё не изменено. Если функция обратного вызова возвращает true, свойству присваивается новое значение, а если функция возвращает false, новое значение отбрасывается, и свойство сохраняет прежнее значение.
Примеры
import kotlin.properties.Delegates
import kotlin.test.*
fun main() {
//sampleStart
var max: Int by Delegates.vetoable(0) { property, oldValue, newValue ->
newValue > oldValue
}
println(max) // 0
max = 10
println(max) // 10
max = 5
println(max) // 10
//sampleEnd
}
import kotlin.properties.Delegates
import kotlin.test.*
fun main() {
//sampleStart
var max: Int by Delegates.vetoable(0) { property, oldValue, newValue ->
if (newValue > oldValue) true else throw IllegalArgumentException("New value must be larger than old value.")
}
println(max) // 0
max = 10
println(max) // 10
// max = 5 // will fail with IllegalArgumentException
//sampleEnd
}
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.properties/-delegates/vetoable.html