类似于观察者模式,当所监测的对象发生改变时,能够收到回调通知。
例如:我们监测一个变量:1
2
3
4
5
6
7
8
9var str: String by Delegates.observable("qianqian",{
property: KProperty<*>, oldValue: String, newValue: String ->
Log.i("xx","改变的属性名称:${property.name} --- ${oldValue} -- ${newValue}" )
})
//点击一个按钮,改变str的值
fun foo(view : View){
str = "haha"
}
这时候我们会发现,当改变str
的值的时候,会打印信息,也就是收到回调:1
改变的属性名称:str --- qianqian -- haha
再比如:检测对象里的其中一个属性:1
2
3
4
5
6
7
8
9
10
11
12
13
14import 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"
}
打印信息:1
2<no name> -> first
first -> second