मुझे लगता है कि के कारण instanceof
और class literals
parameterized generic types
unbounded wild card types
को छोड़कर parameterized generic types
के लिए अनुमति नहीं है। जावा भाषा डिजाइनरों ने इस अपवाद की अनुमति क्यों दी? असंबद्ध जंगली कार्ड प्रकारों के लिए प्रकार की मिटाने की कोई भूमिका नहीं है?उदाहरण के ऑपरेटर को एक असंबद्ध वाइल्ड कार्ड प्रकार पर क्यों अनुमति दी जाती है लेकिन जावा में अन्य पैरामीटर प्रकारों पर नहीं?
5
A
उत्तर
7
बिंदु यह है कि एक वस्तु अपनी ठोस कक्षा को जानता है - लेकिन इसके लिए सामान्य प्रकार के तर्क नहीं। इसलिए यदि हम ArrayList<Integer>
बनाते हैं, तो निष्पादन समय पर यह पता चलता है कि यह कुछ प्रकार है - लेकिन यह Integer
भाग के बारे में नहीं जानता है।
if (foo instanceof ArrayList<?>)
मान्य है:
"किसी तरह का ArrayList
" भाग ठीक क्या ArrayList<?>
साधन जिसके कारण है। यह सिर्फ कच्चे प्रकार का उपयोग करने के लिए बराबर है:
if (foo instanceof ArrayList)
लेकिन वहाँ मेटा डेटा संकलक कहने के लिए कि 'क्षेत्र foo'' ArrayList 'रन टाइम पर इस प्रकार का है ना? मैं [केवल आपका जवाब] का जिक्र कर रहा हूं (http://stackoverflow.com/a/339708/1527084) –
Geek
@ गीक: हाँ, लेकिन यह * फ़ील्ड * के लिए है, न कि * ऑब्जेक्ट *। वे अलग हैं। –
कच्चे प्रकार 'ArrayList' का उपयोग करने के समान' ArrayList > 'के विरुद्ध क्यों जांच कर रहा है? –