में अंतिम कक्षा का विस्तार कैसे करें मेरी समस्या वास्तव में अब मुझे सामना कर रही है। मेरे पास कक्षा है, मान लें Foo
और यह वर्ग getBar
नामक एक विधि को परिभाषित करता है जो Bar
उदाहरण देता है। कक्षा Bar
को Foo
के अंदर परिभाषित किया गया है और इसे public static final
घोषित किया गया है। मैं क्या करना चाहता हूं MyFoo
जो Foo
बढ़ाता है, लेकिन मैं Bar
MyBar
के साथ अपनी खुद की कार्यक्षमताओं (विधियों, गुणों, आदि) को जोड़कर विस्तार करना चाहता हूं। मैं भी MyBar
लौटने के लिए चाहता हूं।जावा
समस्या Bar
अंतिम है।
public class Foo {
Bar bar = new Bar();
public Bar getBar(){
return bar;
}
....
public static final class Bar {
}
}
मुझे क्या करना चाहते हैं::
public class MyFoo extends Foo {
public MyBar getBar(){ // here I want to return an instance of MyBar
}
public static final class MyBar extends Bar { // That's impossible since Bar is final
}
}
मैं ऐसा कैसे प्राप्त कर सकते हैं यहाँ मैं क्या करना चाहते हैं का एक उदाहरण है?
[संपादित करें] मैं अपने प्रश्न में अधिक जानकारी जोड़ रहा हूं। मैं वास्तव में जेनकींस के लिए एक प्लगइन विकसित कर रहा हूं और खोज के बाद, मुझे एहसास है कि एक प्लगइन है जो बेस कार्यक्षमताओं को प्रदान करता है जो मैं करना चाहता हूं, Foo
और Bar
। मैं Foo
और Bar
कस्टम करना चाहता हूं, इसलिए यह मेरी आवश्यकताओं को फिट कर सकता है। फू प्लगइन का मुख्य वर्ग है और बिल्डर नामक कक्षा को बढ़ाता है। फू perform
नामक एक विधि को परिभाषित करता है जिसमें निर्माण करने के लिए सभी संचालन शामिल हैं। Bar
में कॉन्फ़िगरेशन उद्देश्यों के लिए संचालन शामिल हैं और Foo को उन सूचनाओं को प्राप्त करने के लिए बार की आवश्यकता है।
तो मैं MyFoo
के साथ Foo का विस्तार करना चाहता हूं और MyBar
के साथ कुछ कॉन्फ़िगरेशन जोड़ना चाहता हूं। और जैसा कि आप देख सकते हैं, MyFoo
getBar();
बुला दूसरी बात करके उन configuations पाने के लिए की आवश्यकता होगी मैं MyFoo
की instanciation का कोई नियंत्रण नहीं है और MyBar
क्या मुझे ब्लॉक है, यह है कि मैं बार विस्तार नहीं कर सकते है। मैं उसे कैसे प्राप्त कर सकता हूं?
चूंकि 'अंतिम' संशोधक आपको 'बार' उप-वर्ग से रोकता है, इसलिए मैं इसे "रैपिंग" करने की अनुशंसा करता हूं। – mre
यदि 'बार' एक 'अंतिम श्रेणी' है तो यह आमतौर पर कुछ अच्छे कारणों के लिए होता है, उदा। अत्याचार क्योंकि 'फू' के कुछ आविष्कारों की आवश्यकता है। तो मैं ऐसा नहीं करूँगा, या कम से कम आपको सभी प्रासंगिक स्रोत कोड को समझना चाहिए, और शायद इसे फिर से लिखना चाहिए। –
इसे 'गैर' के डेवलपर से नॉन-फाइनल बनाने के लिए पूछें या प्रतिनिधिमंडल का उपयोग करें, जैसा कि सुझाव देता है। –