生成的以下代码的字节代码private final Base $$delegate_0在Derived类中创建一个字段.b分配可变字段时,原始委托不会更改.
有没有办法在保持zero boilerplate实现的同时在运行时更改委托?
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
}
该样本取自文档https://kotlinlang.org/docs/reference/delegation.html并进行了编辑.