Das erzeugte Byte-Code für den folgenden Code erstellt ein private final Base $$delegate_0
Feld in der Derived
Klasse. Wenn das veränderbare Feld b
zugewiesen wird, ändert sich der ursprüngliche Delegat nicht.Ist es in Kotlin möglich, die Delegierung zur Laufzeit zu ändern?
Gibt es eine Möglichkeit, die Delegierten zur Laufzeit zu ändern, während der zero boilerplate
Implementierung zu halten?
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 }
Die Probe in den Dokumenten genommen https://kotlinlang.org/docs/reference/delegation.html und bearbeitet.