igor.wojda
06/18/2021, 8:58 AMclass Container {
val view: View2 = View2()
var onClickListener:(() -> Unit)? by view.onClickListener // does not work
}
class View2 {
var onClickListener:(() -> Unit)? = null
}
Vampire
06/18/2021, 9:02 AMVampire
06/18/2021, 9:04 AMclass Container {
val view: View2 = View2()
var onClickListener:(() -> Unit)?
get() = view.onClickListener
set(onClickListener) {
view.onClickListener = onClickListener
}
}
class View2 {
var onClickListener:(() -> Unit)? = null
}
igor.wojda
06/18/2021, 9:05 AMigor.wojda
06/18/2021, 9:06 AMclass Container {
val view: View2 = View2()
var onClickListener:(() -> Unit)? by PropertyDelegate(view.onClickListener)
}
igor.wojda
06/18/2021, 9:10 AMclass Container {
val view: View2 = View2()
var onClickListener: (() -> Unit)? by Alias(view::onClickListener)
}
class View2 {
var onClickListener:(() -> Unit)? = null
}
class Alias<T>(private val delegate: KMutableProperty0<T>) {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T =
delegate.get()
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
delegate.set(value)
}
}
Vampire
06/18/2021, 9:16 AMVampire
06/18/2021, 9:16 AMclass Container {
val view: View2 = View2()
var onClickListener:(() -> Unit)? by view::onClickListener
}
class View2 {
var onClickListener:(() -> Unit)? = null
}
Vampire
06/18/2021, 9:17 AMigor.wojda
06/18/2021, 9:17 AMigor.wojda
06/18/2021, 9:18 AMVampire
06/18/2021, 9:25 AMVampire
06/18/2021, 9:25 AMIn 1.4.0, we have added new features to improve your experience with delegated properties in Kotlin:
- Now a property can be delegated to another property.