Writing a Custom ReadWriteProperty Delegate
Implement a custom property delegate from scratch using ReadWriteProperty.
The ReadWriteProperty Interface
A custom delegate implements ReadWriteProperty<ThisRef, T> with getValue and setValue operators.
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
class SimpleDelegate<T>(private var value: T) : ReadWriteProperty<Any?, T> {
override fun getValue(thisRef: Any?, property: KProperty<*>): T = value
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
this.value = value
}
}
var x: Int by SimpleDelegate(0)
fun main() { x = 42; println(x) }ReadOnlyProperty for val
For read-only val properties, implement ReadOnlyProperty<ThisRef, T> with only getValue.
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
class Constant<T>(private val value: T) : ReadOnlyProperty<Any?, T> {
override fun getValue(thisRef: Any?, property: KProperty<*>): T = value
}
val pi: Double by Constant(3.14159)
fun main() { println(pi) }All lessons in this course
- by lazy: Deferred Initialization Deep Dive
- observable and vetoable Delegates
- Writing a Custom ReadWriteProperty Delegate
- Delegates for Preferences, Map-Backed Properties & Logging