मैं किसी तृतीय पक्ष लाइब्रेरी में किसी फ़ैक्टरी द्वारा बनाई गई ऑब्जेक्ट को लपेटने के लिए प्रतिनिधिमंडल पैटर्न का उपयोग कर रहा हूं। हाल ही में, पुस्तकालय ने बेस क्लास में एक संरक्षित विधि जोड़ा और मेरा रैपर वर्ग अब काम नहीं करता है। क्या प्रतिबिंब का उपयोग किए बिना किसी के पास कोई अच्छा समाधान है?जावा: प्रतिनिधि पैटर्न और संरक्षित तरीके
यह 3 पार्टी पुस्तकालय में और उनके पैकेज में है,
public class Base {
public void foo();
protected void bar(); // Newly added
}
यह मेरे अपने पैकेज में है,
public class MyWrapper extends Base {
private Base delegate;
public MyWrapper(Base delegate) {
this.delegate = delegate;
}
public void foo() {
delegate.foo()
}
protected void bar() {
// Don't know what to do
}
}
संपादित करें: मेरी मूल पोस्ट स्पष्ट नहीं था। ये 2 वर्ग अलग-अलग पैकेजों में हैं।
प्रश्न का उत्तर देने के लिए मुझे प्रतिनिधिमंडल की आवश्यकता क्यों है। यह प्रतिनिधिमंडल/रैपर पैटर्न का एक सामान्य उपयोग-मामला है और मैं इसे कोड की कुछ पंक्तियों में यहां नहीं दिखा सकता। लाइब्रेरी बेस क्लास का खुलासा करती है लेकिन उनके कारखाने से वास्तविक वस्तु बेस का व्युत्पन्न वर्ग है। कॉन्फ़िगरेशन के आधार पर वास्तविक वर्ग बदलता है। तो मुझे नहीं पता कि प्रतिनिधि क्या है। इसलिए सीधे विरासत पैटर्न यहां काम नहीं करता है।
ठीक है, उस विधि का उद्देश्य क्या है? क्या आप इसे अनदेखा कर सकते हैं? मुझे नहीं लगता, जैसा कि आप कहते हैं "अब और काम नहीं करता है" ... क्या आप super.bar() को कॉल कर सकते हैं? नीले रंग में बस एक शॉट ... क्या आपके पास उस नई विधि पर कोई भी डॉकू है? – Fildor
क्या आपने अपनी रैपर कक्षा को उसी वर्ग/पथ के साथ पैकेज में स्थानांतरित करने की कोशिश की है, जिसकी आधार कक्षा है ?? यह एक समाधान से अधिक हैक है लेकिन 'संरक्षित' विधियों को उसी पैकेज के भीतर सुलभ किया जाना चाहिए –
बेस क्लास 'foo() 'और' bar() 'विधियों को लगता है जैसे' बेस' एक इंटरफेस या एक अमूर्त वर्ग था। क्या आप अपना प्रश्न निर्दिष्ट कर सकते हैं? आपको किस तरह से प्रतिबिंब की आवश्यकता होगी? चूंकि यह संरक्षित है, आपको इसे ओवरराइड करने की आवश्यकता नहीं हो सकती है। –