The generated byte code for the below code creates a private final Base $$delegate_0 field in the Derived class. When the mutable field b is assigned the original delegate does not change.
Is there a way to change the delegate at runtime while keeping 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 the docs https://kotlinlang.org/docs/reference/delegation.html and edited.
bis a val,derivedcan still be a var. Why not recreateDerived()? - Michiel