मैं वर्तमान में जावा जेनरिक पढ़ रहा हूं, और जब वाइल्डकार्ड की बात आती है तो मैं थोड़ा फंस गया हूं।जावा जेनरिक - कक्षा एक सबक्लास स्वयं?
मैं संग्रह वर्ग से इस विधि दी गई है:
public void <T> copy(List<? super T> dest, List<? extends T> src) {
for(int i = 0; i < src.size(); i++) {
dest.set(i, src.get(i));
}
}
मैं तो बताया गया है कि इसे इस तरह विधि कॉल करने के लिए संभव है: प्रकार पैरामीटर है के रूप में
List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);
यह निर्धारित करने के लिए कंपाइलर को छोड़ दिया गया है, पुस्तक कहती है कि कंपाइलर टाइप पैरामीटर को इंटीजर के रूप में चुनता है।
लेकिन यह कैसे संभव है?
यदि यह पूर्णांक होना करने के लिए ले जाया गया, इसका मतलब यह होगा कि विधि घोषणा में -
List<? extends T>
List<Integer extends Integer>
लिए अनुवाद होगा।
क्या यह एक गलती है, या जेनेरिक के संबंध में अलग-अलग नियम हैं? मैंने चारों ओर गुगल किया है और अधिकांश परिणामों का कहना है कि एक वर्ग स्वयं का उप-वर्ग नहीं हो सकता है।
निजेट का उत्तर बिल्कुल सही है और यदि आप उस बिंदु को याद कर रहे थे तो उसने समझाया कि यह सब अच्छा है। हालांकि, जेनेरिक बहुत ही भ्रमित हो सकता है और यदि आपको लगता है कि आपको इस विशिष्ट मामले पर अधिक व्यापक स्पष्टीकरण की आवश्यकता है तो मैं एक देने का प्रयास कर सकता हूं। – user1803551