Kotlin委託

委託

類委託

委託模式已經證明是實現繼承的一個很好的替代方式,
而 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() // 輸出 10
}

Derived 的超類型列表中的 by{: .keyword }-子句表示 b 將會在 Derived 中內部存儲。
並且編譯器將生成轉發給 b 的所有 Base 的方法。