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 {}这种写法就是一个属性代理

