अगर , public List<? extends Annotation> asList(Class<? extends Annotation> ... elems)
अब इस ठीक संकलित कर देगा के बाद से Class<? extends Annotation>
संगत है:
तो संकलक वास्तव में पता चल जाएगा कि किस प्रकार पैरामीटर के साथ प्रतिस्थापित किया और उसके बाद संस्करण.asList()
विधि का होगा है Class<Override>
पर। जावा 8 में, टाइप अनुमान सुविधा को और भी बेहतर किया गया है, ताकि आपको .asList()
विधि के लिए टाइप-पैरामीटर स्पष्ट रूप से सेट करने की आवश्यकता न हो।
हालांकि, अधिक दिलचस्प सवाल
क्यों List<Class<Override>>
List<Class<? extends Annotation>>
साथ संगत नहीं है करने के लिए चला जाता है?
java.lang.Class
एक final
एक है, जो निम्नलिखित दो प्रश्नों के उत्तर में मदद मिलेगी, संयोजन, जिनमें से ऊपर सवाल का जवाब नहीं है।:)
तो,
- क्या एक
List<Class<Override>>
मतलब है?
List<Class<Override>>
का अर्थ है कि हम केवल Class<Override>
के उदाहरण जोड़ सकते हैं और सूची में कुछ भी नहीं। जो महान है, यह जानकर कि हम Class<Override>
उप-वर्ग भी जोड़ नहीं सकते हैं, क्योंकि Class
प्रकार final
है।
List<Class<? extends Annotation>>
का क्या अर्थ है?
List
के इस प्रकार के वर्गों की सूचियों की एक पूरी परिवार का प्रतिनिधित्व करता है, जो सभी के Annotation
प्रकार, कि हम सफलतापूर्वक किसी भी टिप्पणी का प्रकार (उदाहरण के लिए, SuppressWarnings.class
, Override.class
के लिए जोड़ सकते हैं, जिसका मतलब है की उपवर्गों हैं, Documented.class
, आदि) सूची में।
मान देता है कि निम्न उदाहरण वास्तव में सही था:
List<Class<Override>> overrides = Arrays.asList(Override.class);
List<Class<? extends Annotation>> annotations = new ArrayList<>();
annotations = overrides;
annotations.add(SuppressWarnings.class); //HUGE PROBLEM
annotations.add(Documented.class); //ANOTHER HUGE PROBLEM
दो विशाल समस्याओं तथ्य यह है कि हम overrides
करने के लिए कुछ गैर Override
उदाहरणों को जोड़ने के लिए, जो बहुत गलत है कोशिश कर रहे हैं से आते हैं।
हमारे पास पर्याप्त पर्याप्त कंपाइलर है जो वास्तव में ऐसी संभावित समस्याओं का पता लगा सकता है और एक संकलन-समय त्रुटि फेंकने का तरीका है जिससे हम इसे करने से रोक सकते हैं।
और जानकारी:
@kocko आपने किस जावा का उपयोग किया था? मेरे पास jdk1.7_079 है, यहां एक स्क्रीनशॉट है https://www.dropbox.com/s/p6gybp1jct19ehg/generics.jpg – AdamSkywalker
मैंने इसके साथ थोड़ा सा खेला और मुझे लगता है कि मुझे कारण मिला है। मैं थोड़ी देर के बाद एक जवाब लिखूंगा। –
परीक्षण से, जावा 7 की तरह दिखता है आपको स्थिर कॉल 'Arrays।> asList (ओवरराइड.क्लास) बढ़ाता है; '। जावा 8 के साथ मुझे –