转换规则

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开始可以直接使用。

results matching ""

    No results matching ""