生成的以下代码的字节代码在 Derived
类中创建 private final Base $$delegate_0
字段 . 分配可变字段 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并进行编辑 .
1 回答
不,从版本1.1开始,Kotlin不支持此功能,但未来版本正在考虑这一点 . 这由this feature request跟踪 .