Edit Page

委譲 (Delegation)

クラスの委譲

Delegationパターンは、実装継承の良い代替手段であることが証明されており、Kotlinはネイティブでそれをサポートし、かつ定型コードを必要としません。 Derivced クラスは、 Base インターフェイスから継承することができ、指定されたオブジェクトへの public メソッドのすべてを委譲することができます。

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 節は、 bDerived のオブジェクトに内部的に格納されることを示し、コンパイラは b に取り次ぐ Base のすべてのメソッドを生成します。