todd.run पूरी तरह से सही है, लेकिन यह केवल आधा जवाब है। <T>
<?>
(या इसके विपरीत) पर <T>
चुनने के लिए भी उपयोग के मामले हैं जो लागू होते हैं जब आप विधि को संलग्न करने वाले वर्ग में टाइप पैरामीटर नहीं जोड़ते हैं। उदाहरण के लिए, वास्तव में संकलन नहीं होगा
public <E extends JLabel> boolean add(List<E> j) {
boolean t = true;
for (JLabel b : j) {
if (b instanceof JLabel) {
t = t && labels.add(b);
}
}
return t;
}
और
public boolean add(List<? extends JLabel> j) {
boolean t = true;
for (JLabel b : j) {
if (b instanceof JLabel) {
t = t && labels.add(b);
}
}
return t;
}
पहली विधि के बीच अंतर पर विचार जब तक आप, संलग्नित क्लास के लिए एक उपयुक्त प्रकार पैरामीटर जोड़ने जबकि दूसरी विधि चाहे संकलन होगा संलग्न वर्ग में एक प्रकार पैरामीटर है। यदि आप <?>
का उपयोग नहीं करते हैं, तो आप संकलक को यह कहने के लिए स्थानीय रूप से ज़िम्मेदार हैं कि उस प्रकार का अधिग्रहण कैसे किया जाए जो उसके स्थान पर उपयोग किए गए पत्र द्वारा भरा जाएगा। आप अक्सर इस समस्या का सामना करते हैं - उपयोग करने की आवश्यकता है? टी के बजाय - जेनेरिक विधियों को लिखने का प्रयास करते समय "विस्तार" और "सुपर" की आवश्यकता होती है। इस मुद्दे का एक बेहतर लेकिन अधिक विस्तृत उपचार Gilad Bracha's Generics Tutorial (PDF) के पृष्ठ 18 पर है। this stack overflow question भी देखें जिसका उत्तर इन मुद्दों को प्रकाशित करता है।
अपने दूसरे प्रश्न के बारे में जानकारी के लिए इस स्टैक ओवरफ़्लो लिंक को देखें: Java generics - type erasure - when and what happens। जबकि मुझे <?>
और <T>
के बीच संकलन समय अंतर के बारे में आपके प्रश्न का उत्तर नहीं पता है, मुझे पूरा यकीन है कि उत्तर उस पोस्ट में उल्लिखित एरिक्सन this FAQ पर पाया जा सकता है।
स्रोत
2009-03-29 22:33:34
आप इस मामले में वाइल्डकार्ड प्रकार को कैप्चर कर सकते हैं: बूलियन ऐड (सूची जेएलएबल> सूची बढ़ाती है) {वापसी addImpl (सूची); } <टी JLabel> बूलियन addImpl (सूची सूची) को विस्तारित करता है {... –
(उदाहरण कोड थोड़ा अजीब है। आप लेबल्स के बाद वापस आ सकते हैं। मैड झूठ देता है। –
यह उत्तर समझ में नहीं आता है और यह सही नहीं है। मैंने बिना किसी प्रकार के पैरामीटर ('पब्लिक क्लास टेस्ट {सूची लेबल्स = नई ऐरेलिस्ट (); // ऐड विधि}} के बिना पहली विधि को कक्षा में रखा है और यह ठीक संकलित करता है। –
user102008