🤔

【Kotlin】Delegated Propertiesとは?

に公開

Delegated Propertiesの意味

Kotlin公式
Delegated Propertiesは getterとsetterロジックを別のクラスに 委任する(Delegate)Kotlinプロパティを意味すると!

委任する意味は

あるクラス(以下 A クラス)のプロパティ a があるとします。
この a の getter および setter をカスタマイズしようとします。
リンク先の記事のように、プログラマが直接 getter と setter を実装する方法もあります。

しかしその代わりに、別のクラス(以下 B クラス)に定義されている getter と setter を持ってきて、a の getter / setter に割り当てること ― これこそが「委任(デリゲーション)」の意味です。
つまり Bクラスには演算子オーバーロードメソッドが必ず存在すると

コードで見る!

例のコード

import kotlin.reflect.KProperty

// クラスBは Delegate Object
class MyDelegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        return "Delegated property"
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        println("Delegated property never set to $value")
    }
}
// プロパティaは Delegate Property
var a: String by MyDelegate()

fun main() {
    println(a)
    a = "Hello!"
    println(a)
}

出力結果

Delegated property
Delegated property never set to Hello!
Delegated property

Discussion