HashMap<String, String>
मैचों Map<String, ?>
का एक उदाहरण नहीं बल्कि Map<String, Object>
:
तो बीच क्या फर्क है। आप
public void foobar(Map<String, Object> ms) {
...
}
आप एक HashMap<String, String>
की आपूर्ति नहीं कर सकते हैं बारे में चाहते हैं: आप एक विधि है कि कुछ भी करने के लिए String
रों से नक्शे को स्वीकार करता है लिखने के लिए चाहते हैं। यदि आप
public void foobar(Map<String, ?> ms) {
...
}
लिखते हैं तो यह काम करता है!
जावा की जेनेरिक में कभी-कभी गलत समझा जाता है कि List<String>
List<Object>
का उपप्रकार नहीं है। (लेकिन String[]
वास्तव में Object[]
का उपप्रकार है, यही कारण है कि जेनेरिक और सरणी अच्छी तरह से मिश्रण नहीं करते हैं। (जावा में सरणी कॉन्वर्सेंट हैं, जेनेरिक नहीं हैं, वे इनवेरिएंट) हैं।
नमूना: आप एक विधि है कि InputStream
के List
और InputStream
के उपप्रकार को स्वीकार करता है लिखने के लिए चाहते हैं, तो आप
public void foobar(List<? extends InputStream> ms) {
...
}
वैसे लिखना चाहते हैं: Joshua Bloch's Effective Java एक उत्कृष्ट संसाधन है जब आप जावा में इतनी सरल चीजों को समझना पसंद नहीं है। (उपरोक्त आपका प्रश्न भी पुस्तक में बहुत अच्छी तरह से कवर किया गया है।)
स्रोत
2009-03-24 19:19:59
[वाइल्डकार्ड्स] (http://java.sun.com/docs/books/tutorial/extra/generics/wildcards.html) पर आधिकारिक ट्यूटोरियल देखें। यह अच्छी तरह से बताता है और ऑब्जेक्ट का उपयोग करने के लिए यह आवश्यक क्यों है इसका एक उदाहरण देता है। –