2017-02-20 18 views
5

नीचे दिए गए कोड के लिए जेनरेट बाइट कोड 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 और संपादित से लिया जाता है।

उत्तर

8

नहीं, यह कोटलिन में संस्करण 1.1 के रूप में समर्थित नहीं है, लेकिन यह भविष्य के संस्करण के लिए विचाराधीन है। यह this feature request द्वारा ट्रैक किया जाता है।

संबंधित मुद्दे