首页 文章

在Kotlin,是否可以在运行时更改委派?

提问于
浏览
6

生成的以下代码的字节代码在 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 回答

  • 9

    不,从版本1.1开始,Kotlin不支持此功能,但未来版本正在考虑这一点 . 这由this feature request跟踪 .

相关问题