2013-10-29 4 views
5

अगर मैं निम्नलिखित वर्ग जावास्केला ओवरराइड जावा वर्ग विधि है कि आंतरिक वर्ग का संदर्भ

public class A 
{ 
    protected class B 
    { 
    } 

    protected void method(B b) {...} 
} 

में परिभाषित किया गया है और मैं स्केला और ओवरराइड विधि में यह से प्राप्त करना चाहते। मैं निम्न कार्य करने की आशा व्यक्त की है |:

विधि विधि कुछ भी नहीं ओवरराइड करता है:

class C extends A { 

    override def method(b: B): Unit = { 
    // ... do something 
    super.method(b) 
    } 
} 

जब मैं इसे इस तरह निम्न त्रुटि दे कर हालांकि स्केला संकलक पसंद नहीं है। नोट: कक्षा सी के सुपर क्लास में निम्न नाम वाले गैर-अंतिम सदस्य हैं: संरक्षित [पैकेज ...] डीफ़ विधि (x $ 1: ए # बी): यूनिट

एकमात्र तरीका मैं इसे काम कर सकता हूं

class C extends A { 

    override def method(b: A#B): Unit = { 
    // ... do something 
    super.method(b.asInstanceOf[this.B]) 
    } 
} 

मैं यह काफी बदसूरत क्या करने वाले खोजने के लिए और अगर वहाँ यह करने का एक neater तरीका था सोच रहा था: निम्न करने के लिए है? एसबीटी कंसोल में फिर

public class A { 
    public class B {} 
    protected void method(B b) { 
    System.out.println("A#method"); 
    } 
} 

class C extends A { 
    override def method(b: B): Unit = { 
    println("C#method") 
    super.method(b) 
    } 
} 

:

धन्यवाद

देस

उत्तर

1

स्पष्ट कोड मेरे लिए काम करता

scala> new C 
res0: C = [email protected] 

scala> new res0.B 
res1: res0.B = [email protected] 

scala> res0.method(res1) 
C#method [email protected] 
A#method [email protected] 

हालांकि, अगर मैं तो सी संशोधित .scala और एक वृद्धिशील recompile करने के लिए एसबीटी मिलता है, मुझे आपके द्वारा देखी गई त्रुटि मिलती है (0.12.4 और 0.13.0 के साथ परीक्षण किया गया) - यह इसके बारे में एक एसबीटी बग दर्ज करने लायक हो सकता है।

+0

समस्या ग्रहण के भीतर से काम कर रहे संकलक के साथ ऐसा करने के लिए प्रतीत होता है। मैंने एसबीटी के साथ इसका परीक्षण किया और जैसा कि आपने कहा है, यह काम करता है - असल में यह मेरे द्वारा ग्रहण के भीतर संकलित करने के लिए किए गए परिवर्तन एसबीटी संकलन के भीतर काम नहीं करते हैं। ग्रहण के साथ इस मुद्दे को आजमाने और खोजने के लिए मैं आगे की जांच करूंगा। – user79074

+0

मुझे लगता है कि समस्या संकलक के साथ है क्योंकि यह ग्रहण के भीतर से भी होती है। स्केल 2.9.2 और स्कैला 2.10.1 के साथ पुन: उत्पन्न किया है। तो स्कैला लैंग परियोजना के साथ एक बग दायर किया है। – user79074

+0

[एसआई -7946] (https://issues.scala-lang.org/browse/SI-7946), घर पर खेलने वाले लोगों के लिए। – Hugh

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