The generated byte code for the code below creates the private final Base $$delegate_0
field in the Derived
class. When a mutable field b
is assigned, the original delegate is not changed.
Is there a way to change the delegate at runtime while maintaining the zero boilerplate
implementation?
interface Base {
fun print ()
}
class BaseImpl (val x: Int): Base {
override fun print () {println (x)}
}
class Derived (var b: Base): Base by b
fun main (args: Array) {
val b = BaseImpl (10)
val derived = Derived (b)
derived.print () // prints 10
derived.b = BaseImpl (20)
derived.print () // prints 10
}
The sample is taken from https://kotlinlang.org/docs/reference/delegation.html documents and edited.
source share