बाहर क्यों दो विधि
असफल हो जायेगी वे असफल क्योंकि यह है कहा जाता है नीचे आंकड़ा नहीं कर सकता:
यहाँ वाइल्डकार्ड के बारे में संदर्भ कड़ी है वाइल्डकार्ड कैसे काम करता है।
वाइल्डकार्ड "कुछ प्रकार का प्रतिनिधित्व करता है जिसे हम अब और नहीं जानते"।
चलिए एक सरल वर्ग बनाते हैं।
class Holder<T> {
private T obj;
void set(T obj) {
this.obj = obj;
}
T get() {
return obj;
}
}
जब हम एक Holder<?>
है, हम हम इसे कैसे उपयोग कर सकते हैं के लिए विशेष नियम है। विशेष रूप से, हम एक सामान्य तर्क के साथ विधियों को कॉल नहीं कर सकते हैं। ऐसा इसलिए है क्योंकि हम नहीं जानते कि अब और किस प्रकार का है: ऐसा करना असुरक्षित होगा।
जब हम एक Holder<?>
हम जैसे (धारणात्मक) कुछ है है:
class Holder<?> {
private X obj;
void set(X obj) {
this.obj = obj;
}
Object get() {
return obj;
}
}
कहाँ X
प्रकार का मतलब हमारे लिए सीमा बंद है, क्योंकि हम नहीं जानते कि क्या इसे अब और है।
get
रिटर्न Object
क्योंकि है कि केवल वर्ग हम सुनिश्चित obj
है हो सकता है
set
सभी
मुझे लगता है यह अजीब लग सकता है क्योंकि अगर आपकी equalTo
मूल रूप से की तरह घोषित किया गया था पर नहीं कहा जा सकता
public boolean equalTo(Box<?> other);
तो आप इसे कॉल करने में सक्षम होंगे। हालांकि, वाइल्डकार्ड को ?
के साथ बस प्रतिस्थापित करके काम नहीं करता है।
त्रुटि क्या कहती है और आप इसके बारे में क्या समझ नहीं सकते? –
@SotiriosDelimanolis ने सोचा कि बराबर के लिए पैरामीटर बॉक्स (0) बॉक्स > होगा, और यह समझ में नहीं आता कि क्यों बॉक्स > "बॉक्स" और "नया बॉक्स (" abc ")" तर्क के रूप में स्वीकार नहीं कर सकता है। –
foolhunger
जब आप त्रुटि कहते हैं, तो क्या आपका मतलब कंपाइलर त्रुटि या रनटाइम त्रुटि है? – smac89