अगर मैं निम्नलिखित वर्ग जावास्केला ओवरराइड जावा वर्ग विधि है कि आंतरिक वर्ग का संदर्भ
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)
}
}
:
धन्यवाद
देस
समस्या ग्रहण के भीतर से काम कर रहे संकलक के साथ ऐसा करने के लिए प्रतीत होता है। मैंने एसबीटी के साथ इसका परीक्षण किया और जैसा कि आपने कहा है, यह काम करता है - असल में यह मेरे द्वारा ग्रहण के भीतर संकलित करने के लिए किए गए परिवर्तन एसबीटी संकलन के भीतर काम नहीं करते हैं। ग्रहण के साथ इस मुद्दे को आजमाने और खोजने के लिए मैं आगे की जांच करूंगा। – user79074
मुझे लगता है कि समस्या संकलक के साथ है क्योंकि यह ग्रहण के भीतर से भी होती है। स्केल 2.9.2 और स्कैला 2.10.1 के साथ पुन: उत्पन्न किया है। तो स्कैला लैंग परियोजना के साथ एक बग दायर किया है। – user79074
[एसआई -7946] (https://issues.scala-lang.org/browse/SI-7946), घर पर खेलने वाले लोगों के लिए। – Hugh