class - Java: how to "instanceof argument" -


मैंने कोशिश की है:

  पैकेज ro.ex; आयात java.io.IOException; आयात करें java.lang.reflect.Type; क्लास एक्स {सार्वजनिक बूलियन आईआईएनएस (ऑब्जेक्ट ओ, क्लास टी) {ओ इंस्टालेशन टी; } सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) IOException {}}  

उपरोक्त कोड अज्ञात वर्ग "टी" बढ़ाएगा

मेरा प्रश्न यह है:

अद्यतन:

निम्न कोड intellij विचार वाक्यविन्यास चेकर पास नहीं कर सकता

  सार्वजनिक बूलियन isIns (ऑब्जेक्ट ओ, क्लास & लेफ्टिनेंट;? & Gt; टी) {रिटर्न ओ इंस्टाशन टी; }  

इसलिए विचार में सही कोड है:

  सार्वजनिक बूलियन isIns (ऑब्जेक्ट ओ, क्लास & लेफ्टिनेंट;? & Gt; टी) {return t.isAssignableFrom ( o.getClass ()); }  

और अधिक आसान तरीका है:

  पैकेज ro.ex; आयात java.io.IOException; आयात करें java.lang.reflect.Type; कक्षा पूर्व {सार्वजनिक बूलियन है Ins (ऑब्जेक्ट ओ, क्लास टी) {रिटर्न टी। इंस्टेंस (ओ); } सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) IOException फेंकता {ऑब्जेक्ट आर = नया एक्स ()। आईआईएनएस ("", स्ट्रिंग। क्लास); System.out.println (r + "\ t \ t" + नया अपवाद ()। GetStackTrace () [0] .getFileName () + ":" + नया अपवाद ()। GetStackTrace () [0] .getLineNumber () ); }}  

यदि आप x instanceof t लिखते हैं, तो t एक वर्ग होना चाहिए। आपके isIns विधि में, t एक वर्ग नहीं है, यह एक प्रकार है

वर्ग वर्ग , हालांकि, प्रस्ताव विधियों की पेशकश करता है जिसके साथ आप यह तय कर सकते हैं कि कोई अन्य श्रेणी इसके उपवर्ग है: Class.isAssignableFrom (Class) । तो आप अपना तरीका बदल सकते हैं:

  सार्वजनिक बूलियन आईआईएनएस (वस्तु ओ, कक्षा टी) {वापसी टी। }  

(मैंने भी अपना कोड बदल दिया है ताकि परिणामस्वरूप कॉलर को लौटा दिया गया।)


Comments