https://kotlinlang.org logo
Title
r

ribesg

05/02/2019, 10:15 AM
Is there a built-in delegate builder to delegate a property to another one?
private class A {
    var x: Int
}
private val a = A()
var x: Int by a.x // Something like that
y

yousefa2

05/02/2019, 10:20 AM
You can use
get() = a.x
set(value)  {
a.x = value
}
r

ribesg

05/02/2019, 10:21 AM
Yeah I know that
I didn’t find any so I made some.
fun <R, T> Delegates.of(prop: KMutableProperty<T>): ReadWriteProperty<R, T> =
    object : ReadWriteProperty<R, T> {

        override fun getValue(thisRef: R, property: KProperty<*>): T =
            prop.getter.call()

        override fun setValue(thisRef: R, property: KProperty<*>, value: T) {
            prop.setter.call(value)
        }

    }

fun <R, T> Delegates.of(prop: KProperty<T>): ReadOnlyProperty<R, T> =
    object : ReadOnlyProperty<R, T> {

        override fun getValue(thisRef: R, property: KProperty<*>): T =
            prop.getter.call()

    }
val x: Int by Delegates.of(a::x)