🤔
【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