2016-07-15 6 views
13

के साथ संघर्ष करता है एक इंटरफ़ेस का फ़ंक्शन नाम जानबूझकर किसी संपत्ति के गेटर नाम के साथ संघर्ष करता है, लेकिन यह आकस्मिक ओवरराइड समस्या के कारण संकलक द्वारा प्रतिबंधित है। क्या संकलक को यह जानना संभव है कि यह जानबूझकर है?इंटरफ़ेस का फ़ंक्शन प्रॉपर्टी के गेटर

interface A { 
    fun getFoo() 
} 

class B: A { 
    val foo 
} 

उत्तर

13

यह सुविधा किसी भी तरह से लागू नहीं होने लगती है।

@ एक similar question पर AndreyBreslav की टिप्पणी:

आप पल में Kotlin गुणों के साथ जावा तरीकों ओवरराइड नहीं कर सकते। यह अच्छा होगा यदि हम इसका समर्थन कर सकता है हो सकता है, लेकिन हम कैसे मिश्रित पदानुक्रम


इस के लिए लगातार यह करने के लिए अपनी समस्या को हल नहीं कर रहा है पता नहीं है लेकिन कम से कम कोड संकलन करता है: आप बदल सकते हैं @JvmName annotation साथ गेटर के JVM नाम:

interface A { 
    fun getFoo(): SomeType 
} 

class B: A { 
    override fun getFoo() = foo 

    val foo: SomeType = someValue() 
     @JvmName("getFoo_") get() = field 
} 

इसके अलावा, एक और अधिक मुहावरेदार दृष्टिकोण को बदलने पर विचार: ताकि आप कार्यान्वयन में यह ओवरराइड कर सकते हैं, अपने इंटरफेस में val -property को परिभाषित एस:

interface A { 
    val foo: SomeType 
} 

class B : A { 
    override val foo: SomeType = someValue() 
} 

class C : A { 
    override val foo: SomeType 
     get() = someCustomGetter() 
} 
+1

यूपीडी: एक और कोटलिन-बेवकूफ दृष्टिकोण जोड़ा गया। – hotkey

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