2017-02-20 2 views
5

Das erzeugte Byte-Code für den folgenden Code erstellt ein private final Base $$delegate_0 Feld in der Derived Klasse. Wenn das veränderbare Feld b zugewiesen wird, ändert sich der ursprüngliche Delegat nicht.Ist es in Kotlin möglich, die Delegierung zur Laufzeit zu ändern?

Gibt es eine Möglichkeit, die Delegierten zur Laufzeit zu ändern, während der zero boilerplate Implementierung zu halten?

 
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 
} 

Die Probe in den Dokumenten genommen https://kotlinlang.org/docs/reference/delegation.html und bearbeitet.

Antwort

8

Nein, das ist nicht ab Version 1.1 in Kotlin unterstützt, aber das ist unter Berücksichtigung einer zukünftigen Version. Dies wird von this feature request verfolgt.

Verwandte Themen