2017-02-20 46 views
5

爲以下代碼生成的字節代碼在Derived類中創建一個private final Base $$delegate_0字段。當分配可變字段b時,原始委託不會更改。在Kotlin中,是否有可能在運行時更改代表團?

有沒有辦法在運行時更改委託,同時保持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並進行了編輯。

回答

8

不,從版本1.1開始,Kotlin不支持此功能,但未來版本正在考慮此問題。這跟蹤this feature request

相關問題