विषय में सामान्य सवाल का एक व्यावहारिक उदाहरण के रूप में, मैं,इंटरफेस कार्यान्वयन सुपर-क्लास
public boolean containsAll(Iterable<?> c) { /* ... */ }
मैं समझ यह अनुमति दी जानी चाहिए साथ Set
इंटरफ़ेस में containsAll
विधि लागू करना चाहते हैं के बाद से Collection
Iterable
है जिसका अर्थ है containsAll
इंटरफ़ेस आवश्यकता को कवर करेगा। इसी तरह, आमतौर पर बहस superclasses के साथ इंटरफेस को लागू करने में सक्षम होने लगता है जैसे यह काम करना चाहिए।
हालांकि, ग्रहण कोई रास्ता नहीं कहता है (केवल जावैक सीधे प्रयास नहीं किया है) - क्या कोई इसके कारण बता सकता है? मुझे यकीन है कि इस कल्पना में कुछ ऐसा है जो इसे बनाता है, लेकिन मैं आवश्यकता के लिए प्रेरणा को भी समझना चाहता हूं। या क्या मुझे Iterable<?>
की तरह कुछ याद आ रहा है Collection<?>
का सुपरक्लास नहीं है?
एक साइड सवाल के रूप में - दिया गया है कि मैं दो तरीकों की घोषणा कर रहा हूं Iterable
हस्ताक्षर के साथ विधि हमेशा Collection
तर्क के साथ कॉल पर प्राथमिकता दी जाएगी?
ग्रहण त्रुटि:
अगर मैं Collection
हस्ताक्षर के साथ विधि, बस छोड़ने को दूर Iterable
एक (त्रुटि के बाद देखें), मैं निम्नलिखित मिल:
The type BitPowerSet must implement the inherited abstract method Set<Long>.containsAll(Collection<?>)
सटीक कार्यान्वयन किया जा रहा है :
@Override public boolean containsAll(Collection<?> c) {
for (Object o : c) if (!contains(o)) return false;
return true;
}
public boolean containsAll(Iterable<?> c) {
for (Object o : c) if (!contains(o)) return false;
return true;
}
क्या आप एक त्रुटि पोस्ट कर सकते हैं ग्रहण आपको दे रहा है? आईडीईए में मेरे लिए काम करता है। –
@ निकिता: संपादित किया गया। Soooo ... यह सिर्फ एक ग्रहण चीज हो सकता है? – Carl
यह एक शब्दावली दुःस्वप्न है। मैं ऐसी चुनौतियों से दूर भाग गया। – skaffman