एक जावा पुस्तकालय वर्ग मैं उपयोग कर रहा हूँ वाणीकैसे कार्यान्वित करें "कार्यान्वयन प्रतिबंध: विशेषता ... संरक्षित विधि का उपयोग ... एक ठोस विशेषता विधि के अंदर।"
protected getPage(): Page { ... }
अब मैं विशेषताएं है कि मैं अक्सर उपयोग को जोड़ने के लिए एक सहायक स्काला mixin बनाना चाहते हैं। मैं कक्षा का विस्तार नहीं करना चाहता, क्योंकि जावा क्लास में विभिन्न उप-वर्ग हैं जो मैं अलग-अलग स्थानों पर विस्तार करना चाहता हूं।
Implementation restriction: trait
MyMixin
accesses protected methodgetPage
inside a concrete trait method.
वहाँ एक समाधान यह काम करने के लिए कैसे, मेरे उपवर्गों को प्रभावित किए बिना है: समस्या यह है कि अगर मैं अपने mixin trait
में getPage()
उपयोग करते हैं, मैं इस त्रुटि मिलती है? और यह प्रतिबंध क्यों है?
अब तक, मैं एक काम के आसपास के साथ आया था: मैं के रूप में
override def getPage(): Page = super.getPage();
यह काम करने लगता है विशेषता में विधि ओवरराइड, लेकिन मैं पूरी तरह से संतुष्ट नहीं हूँ। सौभाग्य से मुझे अपने उप-वर्गों में getPage()
को ओवरराइड करने की आवश्यकता नहीं है, लेकिन यदि मुझे आवश्यकता है, तो मुझे एक ही विधि के दो ओवरराइड मिलेंगे और यह कार्य-कार्य काम नहीं करेगा।
धन्यवाद, यही वह है जो मैं बचाना चाहता था, मेरे उप-वर्गों में एक्सेसर्स जोड़ना। लेकिन अब मैं समझता हूं कि यह क्यों संभव नहीं है। –
@ PetrPudlák - आपको _every_ subclass में एक्सेसर्स जोड़ने की ज़रूरत नहीं है, केवल _one_ accessor-original के उप-वर्ग को सक्षम करने के लिए। फिर अन्य सभी जो विशेषता में मिश्रण करते हैं वे मूल के बजाय एक्सेसर-सक्षम वर्ग का विस्तार करेंगे। (बेशक, संरक्षित एक्सेसर्स इंटरफेस का हिस्सा होंगे, लेकिन कम से कम आपको केवल उन्हें एक बार लिखना होगा।) –
समस्या यह है कि मैं जावा कक्षाओं के गुण में मिश्रण करना चाहता हूं जिसका एकमात्र आम सुपरक्लास है जावा पुस्तकालययही कारण है कि मैं विस्तारित जावा कक्षाओं के लिए स्कैला सबक्लास बनाने के बिना कार्यक्षमता जोड़ने के लिए, मिश्रण मिश्रण का उपयोग करना चाहता था। –