उत्तर
यह सब सामान्य और कच्चे प्रकार के साथ के रूप में ही है। मौजूदा घोषणाओं के आधार पर संकलक कच्चे प्रकार के बजाय सामान्य प्रकार की मांग कर सकता है।
लेकिन: जावा 1.5 के बाद से आपको जहां भी संभव हो जेनेरिक फॉर्म का उपयोग करना चाहिए। Class<?>
स्पष्ट रूप से बताता है कि आपका मतलब है "अज्ञात वर्ग", Class<String>
स्पष्ट राज्यों का मतलब है कि आपका मतलब String
वर्ग है। एक कच्चे Class
का अर्थ दोनों हो सकता है।
अंत में यह कंपाइलर में कोई फर्क नहीं पड़ता है, लेकिन यह आपके कोड के इरादे को और अधिक समझने योग्य और रखरखाव करने में एक बड़ा अंतर बनाता है।
कक्षा javadoc:
प्रकार पैरामीटर:
T
- वर्ग इसClass
वस्तु द्वारा मॉडलिंग के प्रकार। उदाहरण के लिए,String.class
का प्रकारClass<String>
है। यदि मॉडलिंग का वर्ग अज्ञात है तोClass<?>
का उपयोग करें। प्रकार पैरामीटर के बिनाClass
की
उपयोग प्रकार पैरामीटर के बिना किसी भी सामान्य वर्ग (Map
, List
, आदि) का उपयोग कर के समान है - या तो यह एक पूर्व 1.5 विरासत उपयोग न होने या यह सिर्फ कोड है कि करता है का एक खंड है अनचेक प्रकार कास्टिंग के बारे में परवाह नहीं है।
कक्षा <?>
दिखाता है कि आप जानबूझकर जावा 5-स्तर कोड लिख रहे हैं जो आपको पता नहीं है कि आप किस वर्ग से बात कर रहे हैं या नहीं। इसे छोड़कर यह किसी ऐसे व्यक्ति द्वारा लिखित पुराने कोड या कोड जैसा दिखता है जिसने अभी तक जेनेरिक नहीं सीखा है। वहाँ Class
और Class<?>
के बीच कोई ज्यादा व्यावहारिक अंतर है क्योंकि वे दोनों एक अज्ञात वर्ग निरूपित
Class // An unknown class (raw type)
Class<?> // An unknown class (generic version)
Class<String> // The String class
इस विशेष मामले में:
"यह किसी ऐसे व्यक्ति द्वारा लिखित पुराना कोड या कोड जैसा दिखता है जिसने अभी तक जेनेरिक नहीं सीखा है।" यह एक सही बयान है। कक्षा (उच्चारण "अज्ञात वर्ग"), यानी, एक वर्ग जिसका प्रकार कुछ भी मेल खाता है। इसे स्पष्ट कारणों से जंगली-कार्ड प्रकार कहा जाता है।
उदाहरण के लिए:
public void drawAll(List<Shape> shapes) {
for (Shape s: shapes) {
s.draw(this);
}
}
प्रकार नियमों का कहना है कि drawAll() केवल वास्तव में Shape
की सूची पर कहा जा सकता है: ऐसा नहीं है, उदाहरण के लिए, पर कहा जा सकता है, कहते हैं, एक List<Circle>
। यह दुर्भाग्यपूर्ण है, क्योंकि सभी विधि सूची से आकार पढ़ती हैं, इसलिए इसे List<Circle>
पर भी बुलाया जा सकता है।
हम जो भी चाहते हैं वह किसी भी प्रकार के आकार की सूची स्वीकार करने के तरीके के लिए है।
public void drawAll (List <? extends Shape> shapes) {
}
अधिक पढ़ सकते हैं: http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html
- 1. instanceof कक्षा <?> पैरामीटर
- 2. PHPUnit: कक्षा <ClassName><ClassNameTest> .php
- 3. कक्षा <T> से टाइप रीफरेंस <T>
- 4. क्यों अमरूद के TypeToken <T> .getRawType() वापसी कक्षा <? super T> बजाय कक्षा <T>
- 5. <HTML> टैग में कक्षा विशेषता?
- 6. जीडब्ल्यूटी.क्रेट (कक्षा <?>) बनाम जीआईएन?
- 7. कक्षा परिभाषा वर्ग का नाम <>
- 8. पायथन: मेरी कक्षा एक्स</p> <p>में पहले और बाद के तरीकों
- 9. जावा: दो संबंधित जेनरिक प्रकार के साथ एक मानचित्र की घोषणा (? <T> नक्शा <कक्षा <फैली ClassA <T>>, कक्षा <फैली ClassB <T> >>)
- 10. कक्षा एक कच्चा प्रकार है। सामान्य प्रकार कक्षा <T> के संदर्भ होना चाहिए पैरामिट्रीकृत
- 11. सी # जेनिक्स: सूची <Object> या नई कक्षा सूची
- 12. एक अवलोकन योग्य <T> कक्षा बनाना: ओवरलोडिंग = ऑपरेटर?
- 13. Enum.valueOf (कक्षा <T> enumType, स्ट्रिंग नाम) प्रश्न
- 14. ग्रहण चेतावनी - कक्षा एक कच्चा प्रकार है। सामान्य प्रकार कक्षा <T> के सन्दर्भ पैरामिट्रीकृत
- 15. कक्षा में निरंतर << स्वयं ब्लॉक
- 16. जावा जेनेरिक्स कक्षा के साथ <T>
- 17. जावा जेनरिक प्रश्न - कक्षा <T> बनाम टी?
- 18. कक्षा << आत्म मतलब क्या है?
- 19. जावा की कक्षा <T> सामान्य क्यों है?
- 20. निर्माता आशय (नई View.OnClickListener() {}, कक्षा <DrinksTwitter>) अपरिभाषित
- 21. कक्षा <?> जावा में क्या मतलब है?
- 22. वर्ग, मॉड्यूल, और कक्षा << स्वयं विधि नहीं समझ
- 23. कक्षा ए कक्षा ए
- 24. कक्षा सूची के लिए कक्षा संरचना कक्षा?
- 25. कक्षा कक्षा - उदाहरण बनाम कक्षा के तरीके
- 26. <%! %> और <% %>
- 27. कक्षा बी को कक्षा
- 28. कक्षा
- 29. कक्षा
- 30. java.lang.Class की getInterfaces() विधि वापसी क्लास <?> [] और कक्षा <? super T> [] क्यों नहीं है?
आप वर्ग कक्षा जहां भी संभव हो ... –
आप स्पष्टीकरण के बिना नियमों का उपयोग जहां भी संभव से बचना चाहिए बचना चाहिए। –