मैंने कुछ विषयों को पढ़ा है जो जेनेरिक के बारे में कुछ प्रश्नों को कवर करते हैं, जैसे उनके relationship with raw types। लेकिन मुझे Java SE tutorial on unbound generics में मिली एक निश्चित रेखा पर एक अतिरिक्त स्पष्टीकरण चाहिए।जावा जेनरिक, अनबाउंड वाइल्डकार्ड <?> बनाम <Object>
एक वाक्य के अनुसार:
printList के लक्ष्य को किसी भी प्रकार की एक सूची मुद्रित करने के लिए है, लेकिन यह है कि लक्ष्य को प्राप्त करने में विफल रहता है - यह केवल वस्तु की कई घटनाओं के मुद्रण करता है; यह सूची < इंटीजर >, सूची < स्ट्रिंग >, सूची < डबल >, और इसी तरह, क्योंकि वे सूची < ऑब्जेक्ट > की उपप्रकार नहीं हैं।
यदि मैं यह वाक्य अच्छी तरह से समझता हूं; List<?>
और List<Object>
के बीच का अंतर यह है कि हम पूर्व को लागू करके टाइप तर्क List<String>
या List<Integer>
का उपयोग कर सकते हैं। हालांकि अगर हम बाद में लागू करते हैं, तो हम केवल प्रकार तर्क List<Object>
का उपयोग कर सकते हैं। जैसे कि List<?>
Object
अर्थात् List<? Object>
के ऊपरी बाउंड है।
लेकिन फिर निम्न वाक्य मुझे भ्रमित करता है, इस अर्थ में कि मैंने जो पहले समझा था, List<Object>
में केवल Object
वर्ग के उदाहरण होना चाहिए और कुछ और नहीं।
यह ध्यान रखना महत्वपूर्ण है कि
List<Object>
औरList<?>
समान नहीं हैं। आपList<Object>
में ऑब्जेक्ट, या ऑब्जेक्ट का कोई सबटाइप डाल सकते हैं। लेकिन आपList<?>
में केवलnull
डाल सकते हैं।
मुझे यहां "आप जो पूछ रहे हैं अस्पष्ट" के साथ जाना होगा। – Mena
वह 'एक अतिरिक्त स्पष्टीकरण' चाहता है। – ctst
यह सुनिश्चित नहीं है कि आप कहां से अपनी जानकारी प्राप्त कर रहे हैं, लेकिन आपके द्वारा प्रदान किए गए उदाहरण उदाहरण दोनों गलत हैं। – jervine10