转换规则
Kotlin编译器会为每一个被委派的属性生成一个辅助的属性,并委派给它。
class C {
var prop: Type by MyDelegate()
}
上述代码会被自动转化为如下代码:
class C {
private val prop$delegate = MyDelegate()
var prop: Type
get() = prop$delegate.getValue(this, this::prop)
set(value: Type) = prop$delegate.setValue(this, this::prop, value)
}
对prop而言,隐藏的属性prop$delegate会被生成,并且访问器的代码简单的委派给了添加的属性。
请重点看一下上述转换代码的调用方式!!!
Kotlin编译器提供了提供了所有的关于prop的必要信息:this代表外部类C的一个实例,this::prop代表描述prop的KProperty反射对象。
请注意语法this::prop指向了一个绑定可调用的引用,从Kotlin1.1开始可以直接使用。