जैसा कि दूसरों ने उल्लेख किया है, आप एक वर्ग चर को पास नहीं कर सकते instanceof
क्योंकि एक वर्ग चर वस्तु का एक उदाहरण संदर्भित करता है , जबकि दाहिने हाथ का instanceof
एक प्रकार होना चाहिए । इसका instanceof
मतलब यह नहीं है कि "y ऑब्जेक्ट एक्स का एक उदाहरण है", इसका मतलब है "वाई टाइप एक्स का एक उदाहरण है"। मामले में आप एक वस्तु और एक प्रकार के बीच अंतर नहीं जानते हैं, विचार करें:
Object o = new Object();
यहाँ, प्रकार है Object
, और o
उस प्रकार के साथ ऑब्जेक्ट के उदाहरण के लिए एक संदर्भ है। इस प्रकार:
if(o instanceof Object)
वैध है लेकिन
if(o instanceof o)
नहीं है क्योंकि o
दाहिने हाथ की तरफ एक वस्तु है, एक प्रकार नहीं है।
आपके मामले के लिए अधिक विशिष्ट, एक वर्ग का उदाहरण एक प्रकार नहीं है, यह एक ऑब्जेक्ट है (जो आपके लिए जेवीएम द्वारा बनाया गया है)। आपकी विधि में, Class
एक प्रकार है, लेकिन clazz
एक वस्तु है (ठीक है, एक वस्तु का संदर्भ)
आपको किसी ऑब्जेक्ट को क्लास ऑब्जेक्ट से तुलना करने का एक तरीका है। यह पता चला है कि यह लोकप्रिय है इसलिए यह आपको क्लास ऑब्जेक्ट की एक विधि के रूप में प्रदान किया गया है isInstance()
:।
यहाँ isInstance के लिए जावा डॉक्टर है, जो इसे बेहतर बताता है:
public boolean isInstance(Object obj)
निर्धारित करता है कि निर्दिष्ट ऑब्जेक्ट असाइनमेंट-संगत है जो इस वर्ग द्वारा दर्शाए गए ऑब्जेक्ट के साथ है। यह विधि जावा लैंग्वेज इंस्टाफॉपर ऑपरेटर का डायनेमिक समकक्ष है। यह विधि सही है यदि निर्दिष्ट ऑब्जेक्ट तर्क गैर-शून्य है और किसी ClassCastException को बढ़ाए बिना इस क्लास ऑब्जेक्ट द्वारा दर्शाए गए संदर्भ प्रकार पर डाला जा सकता है। यह अन्यथा गलत है।
विशेष रूप से, यदि यह क्लास ऑब्जेक्ट एक घोषित वर्ग का प्रतिनिधित्व करता है, तो यह विधि सही साबित होती है यदि निर्दिष्ट ऑब्जेक्ट तर्क प्रतिनिधित्व वर्ग (या इसके किसी उपवर्ग का) का एक उदाहरण है; यह अन्यथा गलत है। यदि यह क्लास ऑब्जेक्ट एक सरणी क्लास का प्रतिनिधित्व करता है, तो यह विधि सही होती है यदि निर्दिष्ट ऑब्जेक्ट तर्क को पहचान रूपांतरण या चौड़ी संदर्भ रूपांतरण द्वारा सरणी वर्ग के ऑब्जेक्ट में परिवर्तित किया जा सकता है; यह अन्यथा गलत है। यदि यह क्लास ऑब्जेक्ट एक इंटरफ़ेस का प्रतिनिधित्व करता है, तो यह विधि सही होती है यदि क्लास या निर्दिष्ट ऑब्जेक्ट तर्क का कोई सुपरक्लास इस इंटरफ़ेस को लागू करता है; यह अन्यथा गलत है। यदि यह क्लास ऑब्जेक्ट एक आदिम प्रकार का प्रतिनिधित्व करता है, तो यह विधि गलत है।
पैरामीटर: obj -
रिटर्न की जाँच करने के लिए वस्तु : सच है अगर obj इस वर्ग का एक उदाहरण है
क्योंकि: JDK1.1