मान लीजिए मैं इन इंटरफेस है:का उपयोग पैरामीटर कि कई इंटरफेस पूर्व जेनरिक लागू करता
public interface I1 {
void foo();
}
public interface I2 {
void bar();
}
और वर्गों:
public class A extends AParent implements I1, I2 {
// code for foo and bar methods here
}
public class B extends BParent implements I1, I2 {
// code for foo and bar methods here
}
public class C extends CParent implements I1 {
// code for foo method here
}
अब, जेनरिक के साथ मैं की तरह एक विधि है कर सकते हैं:
public <T extends I1 & I2> void method(T param) {
param.foo();
param.bar();
}
और मैं इसे पैरामीटर के रूप में ए और बी दोनों के साथ कॉल कर सकता हूं, लेकिन सी के साथ नहीं (यह I2 लागू नहीं करता है)।
इस प्रकार के प्रकार सुरक्षा पूर्व जेनरिक (जावा < 1.5) प्राप्त करने का कोई तरीका था।
इस बात पर विचार करें कि ए, बी और सी के पास अलग-अलग विरासत पेड़ हैं, और यह वास्तव में एक सामान्य माता-पिता होने वाले माता-पिता और बी-पैरेंट जैसे कुछ करने का विकल्प नहीं है।
मैं जानता हूँ कि तुम कर सकते हो:
public void method(I1 param) {
param.foo();
((I2)param).bar();
}
लेकिन फिर आप भी method(new C())
जो I2 को लागू नहीं करता है कह सकते हैं, तो आप मुसीबत में पड़।
तो क्या ऐसा कोई अन्य तरीका है जिससे आप इसे कर सकते थे?
पीएस : मुझे वास्तव में ऐसा करने की ज़रूरत नहीं है, यह ज्यादातर जिज्ञासा से बाहर है जो मैं पूछता हूं।
मैं इन सबसे छुटकारा इस एहसास हुआ के बाद मैं प्रश्न पूछा है, हालांकि यदि आप एक से अधिक दो इंटरफेस है, और आप मिश्रण और विभिन्न तरीकों के लिए उन से मिलान करना चाहते हैं, यह हो सकता है आप जिस संयोजन का उपयोग करना चाहते हैं उसके लिए एक बाल इंटरफ़ेस बनाना एक दर्द है। मैं 'विधि (I1 और I2 param)' जैसी विधि बनाने के तरीके के साथ और सोच रहा था या पैरामीटर कहने के कुछ अन्य तरीकों से चलने पर कई इंटरफ़ेस लागू होते हैं (कोई नया वर्ग/इंटरफ़ेस बनाये बिना) –
मुझे नहीं लगता डिजाइन दृष्टिकोण में यह अच्छा है। कृपया मेरा जवाब देखें। – hqt