Observable
Delegates.observable()需要传入两个参数:初始化值、用于修改的handler。handler将会在每次给属性赋值时调用(在赋值操作进行之后)。它有三个参数:被赋值的属性、旧的值、新的值:
import kotlin.properties.Delegates
class User {
var name: String by Delegates.observable("<no name>") {
prop, old, new ->
println("$old -> $new")
}
}
fun main(args: Array<String>) {
val user = User()
user.name = "first"
user.name = "second"
}
将会打印出:
<no name> -> first
first -> second
如果你想拦截这个赋值过程并且否定这次赋值,可以使用vetoable()方法替换observable()方法。传递给vetoable的handler会在赋值之前调用。