2017-02-20 15 views
5

Aşağıdaki kod için oluşturulan bayt kodu, Derived sınıfında private final Base $$delegate_0 alanı oluşturur. Değiştirilebilir alan b atandığında, özgün temsilci değişmez.Kotlin'de, çalışma zamanında delegasyonu değiştirmek mümkün mü?

zero boilerplate Uygulamasını kullanırken çalışma zamanında temsilci değiştirme yolu var mı?

 
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 
} 

örnek dokümanlar https://kotlinlang.org/docs/reference/delegation.html ve düzenlenmiş alınır.

cevap

8

Hayır, bu sürüm 1.1'den itibaren Kotlin'de desteklenmez, ancak bu, gelecekteki bir sürüm için değerlendirilmektedir. Bu this feature request tarafından izlenir.