दूसरों के रूप में उल्लेख किया है, तो आप क्योंकि एक वर्ग वैरिएबल संदर्भ एक वस्तु का एक उदाहरण है, जबकि instanceof
के दाहिने हाथ की एक प्रकार होने की instanceof
करने के लिए एक वर्ग चर पारित नहीं कर सकते हैं। यही है, instanceof
का मतलब यह नहीं है कि "y ऑब्जेक्ट एक्स का एक उदाहरण है", इसका अर्थ है "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)
निर्धारित करता है कि निर्दिष्ट ऑब्जेक्ट काम-संगत वस्तु इस वर्ग का प्रतिनिधित्व करती है। यह विधि गतिशील जावा भाषा उदाहरण ऑपरेटर के बराबर है। विधि सत्य लौटाता है यदि निर्दिष्ट ऑब्जेक्ट तर्क गैर-शून्य है और के बिना क्लासकास्ट अपवाद को बढ़ाकर इस क्लास ऑब्जेक्ट द्वारा संदर्भित संदर्भ प्रकार में डाला जा सकता है। यह अन्यथा झूठी वापसी करता है।
विशेष रूप से, यदि यह कक्षा वस्तु घोषित कक्षा का प्रतिनिधित्व करती है, तो यह विधि सही होती है यदि निर्दिष्ट ऑब्जेक्ट तर्क का प्रतिनिधित्व वर्ग (या इसके किसी भी उप-वर्ग) का उदाहरण है; यह अन्यथा झूठी देता है। यदि यह क्लास ऑब्जेक्ट एक सरणी वर्ग का प्रतिनिधित्व करता है, तो यह विधि सत्य लौटाती है यदि निर्दिष्ट ऑब्जेक्ट तर्क को पहचान रूपांतरण द्वारा सरणी वर्ग के ऑब्जेक्ट में परिवर्तित किया जा सकता है या संदर्भ रूपांतरण को बढ़ाया जा सकता है; यह अन्यथा झूठी वापसी करता है। यदि यह क्लास ऑब्जेक्ट एक इंटरफ़ेस का प्रतिनिधित्व करता है, तो यह विधि सत्य लौटाती है यदि निर्दिष्ट ऑब्जेक्ट तर्क का वर्ग या कोई सुपरक्लास इस इंटरफ़ेस को लागू करता है; यह अन्यथा झूठा रिटर्न देता है। यदि यह कक्षा वस्तु आदिम प्रकार का प्रतिनिधित्व करती है, तो यह विधि गलत होती है।
पैरामीटर: obj - वस्तु
रिटर्न की जांच करने के: अगर सही है obj इस वर्ग का एक उदाहरण है
के बाद से: JDK1.1
मैं कोड पता पूरी तरह से बेकार है , मैं सिर्फ अपने भ्रम का प्रदर्शन करना चाहता हूं :) – eric2323223
'इंटीजर' ** ** कक्षा एक शाब्दिक नहीं है। 'Integer.class' एक वर्ग शाब्दिक होगा (जेएलएस के § 15.8.2 देखें: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.2)। 'Exampleof' ऑपरेटर जेएलएस के निर्दिष्ट § 15.20.2 के रूप में "संदर्भ प्रकार" (उर्फ एक प्रकार का नाम) लेता है: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html# 15.20.2 –
ऑब्जेक्ट की पहले से ही आपूर्ति की जा रही है, इसलिए मैं 'clazz.isInstance (obj)' का उपयोग करूंगा। –