2013-02-19 13 views
5

मुझे लगता है कि के कारण instanceof और class literalsparameterized generic typesunbounded wild card types को छोड़कर parameterized generic types के लिए अनुमति नहीं है। जावा भाषा डिजाइनरों ने इस अपवाद की अनुमति क्यों दी? असंबद्ध जंगली कार्ड प्रकारों के लिए प्रकार की मिटाने की कोई भूमिका नहीं है?उदाहरण के ऑपरेटर को एक असंबद्ध वाइल्ड कार्ड प्रकार पर क्यों अनुमति दी जाती है लेकिन जावा में अन्य पैरामीटर प्रकारों पर नहीं?

उत्तर

7

बिंदु यह है कि एक वस्तु अपनी ठोस कक्षा को जानता है - लेकिन इसके लिए सामान्य प्रकार के तर्क नहीं। इसलिए यदि हम ArrayList<Integer> बनाते हैं, तो निष्पादन समय पर यह पता चलता है कि यह कुछ प्रकार है - लेकिन यह Integer भाग के बारे में नहीं जानता है।

if (foo instanceof ArrayList<?>) 

मान्य है:

"किसी तरह का ArrayList" भाग ठीक क्या ArrayList<?> साधन जिसके कारण है। यह सिर्फ कच्चे प्रकार का उपयोग करने के लिए बराबर है:

if (foo instanceof ArrayList) 
+0

लेकिन वहाँ मेटा डेटा संकलक कहने के लिए कि 'क्षेत्र foo'' ArrayList 'रन टाइम पर इस प्रकार का है ना? मैं [केवल आपका जवाब] का जिक्र कर रहा हूं (http://stackoverflow.com/a/339708/1527084) – Geek

+0

@ गीक: हाँ, लेकिन यह * फ़ील्ड * के लिए है, न कि * ऑब्जेक्ट *। वे अलग हैं। –

+0

कच्चे प्रकार 'ArrayList' का उपयोग करने के समान' ArrayList 'के विरुद्ध क्यों जांच कर रहा है? –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^