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

ilk*_*las 7 kotlin

生成的以下代码的字节代码private final Base $$delegate_0Derived类中创建一个字段.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并进行了编辑.

yol*_*ole 10

不,从版本1.1开始,Kotlin不支持此功能,但未来版本正在考虑这一点.此功能请求会跟踪此信息.