类代理

委托模式已经被证明是一个好的可选方案来替代继承,Kotlin天生支持这个特性,不需要任何样板代码。类Derived可以实现一个接口Base,并且可以将其所有的方法委托给一个特定的对象。

interface Base {
    fun print()
}
class BaseImpl(val x: Int) : Base {
    override fun print() { print(x) }
}
class Derived(b: Base) : Base by b
fun main(args: Array<String>) {
    val b = BaseImpl(10)
    Derived(b).print() // prints 10
}

在Derived类的超类列表里面的by语句表明b会被存储在Derived对象的内部,并且编译器将会生成所有的Base的方法指向b。

results matching ""

    No results matching ""