के साथ अनियमितताओं का मानना है कि जेनिक्स में ?
टाइप विशिष्ट अज्ञात प्रकार है। जिसका अर्थ है, बताएं कि उस प्रकार की एक सूची हमें किसी भी प्रकार की वस्तु को जोड़ने से रोकती है।(?) वाइल्डकार्ड जेनेरिक प्रकार
List<?> unknownList;
unknownList.add(new Object()); // This is an error.
कंपाइलर अपेक्षित त्रुटि देता है।
लेकिन जब अज्ञात प्रकार दूसरा स्तर जेनरिक है, तो कंपाइलर परवाह नहीं लगती है।
class First<T> {}
List<First<?>> firstUnknownList;
// All these three work fine for some reason.
firstUnknownList.add(new First<>());
firstUnknownList.add(new First<Integer>());
firstUnknownList.add(new First<String>());
मैंने सोचा था कि शायद संकलक बिल्कुल दूसरे स्तर में सामान्य पैरामीटर के बारे में परवाह नहीं करता है, लेकिन यह मामला नहीं है,
List<First<Integer>> firstIntegerList;
firstIntegerList.add(new First<String>()); // This gives a compiler error as expected.
तो, क्यों संकलक हमें किसी भी तरह जोड़ने की अनुमति देता तत्व के जब केवल एक अज्ञात तत्व (और इसलिए कुछ भी नहीं) दूसरे उदाहरण में स्वीकार्य है?
नोट: संकलक जावा 1.8
'नया() '' सूची ' में जोड़ने के बाद, 'आप फिर से क्या कर सकते हैं असुरक्षित है? कल्पना करें कि आपके पास निर्माता 0''और उपभोक्ता' 'विधि' पहले 'पर विधि है: आप उपभोक्ता को नहीं बुला सकते हैं; और आप निर्माता से 'ऑब्जेक्ट' प्राप्त कर सकते हैं। इस प्रकार, इसके बारे में कुछ भी असुरक्षित नहीं है - जब तक कि मुझे एक स्पष्ट मामला याद नहीं आ रहा है। –
"और इसलिए कुछ नहीं" 'शून्य 'को छोड़कर। –
ए 'सूची >' को 'सूची' निर्दिष्ट किया जा सकता था और फिर ऑब्जेक्ट * जोड़ना गलत है। 'सूची