187 字
1 分钟
Kotlin 属性代理(Delegated Properties)
- Kotlin 属性代理(Delegated Properties)可以让你给某个属性添加一个代理
class Example {
    var p:String by Delegate()
}
- var p:String by Delegate()这句中- Delegate就是那个代理,它必须实现下面的方法
- 如果被代理的是一个不可变的属性 val p就要实现getValue方法
- override operator fun getValue(thisRef:Example, property:KProperty<*>):String{}
- 如果 p是可变的,还需要实现setValue方法
- override operator fun setValue(thisRef: Example, property: KProperty<*>, value:String){}
- 其中 thisRef指的是Example类,property代表p本身,value是要给设置的新值
- 怎么理解这个呢,其实 p在编译后就不再是一个属性了,而是变成这样
 
- 本质上就是个语法糖,常用的 val p by lazy {}这种写法就是一个属性代理

