मैंने q1, q2, q3 पर प्रश्नों पर एक नज़र डाली, लेकिन वे बिल्कुल मेरे प्रश्न को कवर नहीं करते हैं।"ArrayList <A>" और "ArrayList <? extends A>" के बीच व्यावहारिक अंतर क्या है?
ध्यान दें कि ArrayList<A> and ArrayList<? extends A>
का उपयोग चर या पैरामीटर घोषित करने के लिए किया जाना चाहिए (एक नई जेनेरिक कक्षा बनाने के लिए नहीं)।
दोनों भाव बराबर जब एक वस्तु विशेषता की घोषणा (मामले 1) ?: हैं
class Foo {
private ArrayList<A> aList; // == ArrayList<? extends A> aList;
}
संपादित करें: दोनों भाव क्या वस्तुओं की तरह aList
में जोड़े जाने की अनुमति दी जाती है की दृष्टि से बराबर कर रहे हैं ?, लेकिन अलग-अलग निम्न मामले के समान अर्थ में?
लेकिन वे अलग है जब एक पैरामीटर घोषणा (मामले 2) ?:
void methodFoo(ArrayList<A> al) != void methodFoo(ArrayList<? extends A> al)
में प्रयोग किया जाता है, क्योंकि पहले एक ही इजाजत दी पारित होने के लिए ArrayList वस्तुओं जबकि दूसरे की तरह "और अधिक अनुमोदक" होगा की अनुमति देता है ArrayList<A1>
और ArrayList<A2>
(जब तक ए 1 और ए 2 विस्तारित ए) भेजा जाए?
यदि यह सही है, तो क्या कोई अन्य परिदृश्य है जहां दो अभिव्यक्ति प्रभावी ढंग से भिन्न हैं?
धन्यवाद,
जहां तक मुझे पता है, कोई अंतर नहीं है। –