बढ़ाता है मुझे बस यह समझ में नहीं आता है।कच्चे <? ऑब्जेक्ट>
List list = new ArrayList();
List <? extends Object> list1 = list; // unchecked conversion warning.
Object
के बाद से जावा में उच्चतम ऊपरी बाध्य है, मैं किसी भी कारण नहीं दिख रहा है यही कारण है कि चेतावनी है।
अद्यतन 1:
AKF के जवाब के संबंध में:
मैं पूरी तरह से समझते हैं कि आप क्या कह रहे हैं। मुझे पहले से यह पता है। लेकिन < ? extends Object>
उच्चतम ऊपरी सीमा है। जिसका अर्थ है कि आपके पास कोई भी प्रकार है जो आप चाहते हैं। मूल रूप से <?> == <? extends Object>
। क्यों यहाँ कोई चेतावनी
List list = new ArrayList();
List.add("a");
List <? extends Runnable> list1 = list; //warning here
:
आप अपने कोड पर इस कोशिश कर सकते हैं और आप देखेंगे <?> == <? extends Objects>
अद्यतन 2: Sheng's answer करने के लिए
संबंध में?
List <?> list2 = list; // No warning here
अद्यतन 3:
मैं सिर्फ ऊपर और अभी भी हैरान समीक्षा कर रहा हूँ।
के बाद से निम्नलिखित संकलक ने अनुमति दी है:
List a = new ArrayList();
List <?> b = a;
List <? extends Object> c = a; // with warning of course
for (Object obj : b) {} // I don't agree with your statements above that <?> cannot be // written in the for (:) loop as shown here for (Object obj : c) {}
दोनों अनुमत हैं। तो मैं अभी भी क्यों अनियंत्रित चेतावनी जब <? extends Object>
अंतर यह है कि कच्चे साधन * कोई निर्दिष्ट प्रकार * और ' ऑब्जेक्ट बढ़ाता है> 'विशिष्ट विशिष्ट प्रकार की परिभाषा है। तो * कोई प्रकार * से * कुछ प्रकार * यह एक अनचेक रूपांतरण है। –
फिर क्यों > सूची 2 = सूची सूचीबद्ध करें; // काम करता है। यहां कोई चेतावनी नहीं है। यह किसी प्रकार के लिए कोई प्रकार भी निर्दिष्ट नहीं कर रहा है (केवल > और ऑब्जेक्ट बढ़ाता है> पूर्व को बढ़ाया गया है और बाद वाला बाध्य है) – yapkm01