2012-02-18 11 views
8

मेरे पास जावा में ऑब्जेक्ट है। क्या यह जांचने का कोई तरीका है कि ऑब्जेक्ट वास्तव में उन ऑब्जेक्ट्स को कास्टिंग करने से पहले स्ट्रिंग, हैश मैप, या हैश मैप [] का उदाहरण है?जांचें कि ऑब्जेक्ट स्ट्रिंग, हैश मैप, या हैश मैप का उदाहरण है []

यदि नहीं, ऐसा लगता है कि उपर्युक्त काम करेगा, तो यह प्रत्येक वस्तु में डालने का एक तरीका है, और नए जाली वस्तु के बारे में कुछ जांचने के लिए यह देखने के लिए कि वास्तव में यह किस प्रकार का ऑब्जेक्ट था casted?

+1

'exampleof' का उपयोग करने के बजाय आप हमेशा, निश्चित रूप से अनुमानित ऑब्जेक्ट प्रकार पर आ सकते हैं और' ClassCastException' को सुन सकते हैं। –

+2

@ हॉटिक्स: सच। एक छोटा अंतर यह है कि यदि 'ओबीजे' 'शून्य' है, तो' (ओबीजे उदाहरण ____) '' झूठा 'होगा, लेकिन '((____) obj)' अपवाद को उठाने का कारण नहीं होगा। – ruakh

+0

@ruakh - सही। (और मैं अपवाद कैचिंग बनाम 'exampleof' के उपयोग की वकालत नहीं कर रहा था, बस यह इंगित करता हूं कि यह भी काम करेगा।) –

उत्तर

25

हाँ:

if(obj instanceof String) 
{ 
    String str = (String) obj; 
    . 
    . 
    . 
} 

वैसे, इस बारे में स्पष्ट करने के लिए:

[है & hellip;] देखने के लिए परीक्षण नव casted वस्तु के बारे में कुछ है, तो इसकी वास्तव में वस्तु के प्रकार में जिसे इसे कास्ट किया गया था?

आप किसी अमान्य प्रकार में कुछ नहीं डाल सकते हैं। यदि obj में String टाइप किया गया है, तो ((Integer)obj) रन-टाइम पर उठाए जाने के लिए ClassCastException का कारण बन जाएगा।

+1

ध्यान देने योग्य एक बात यह है कि 'exampleof' झूठ लौटाता है जब obj शून्य है –

+0

तो अगर मैं बाहर .println() वस्तु और मैं देखता हूं "[Ljava.lang.Object; @ 4296e599" इसका क्या अर्थ है? मैंने सोचा कि यह एक मानचित्र या हैश मैप था लेकिन परीक्षण के दौरान मुझे इनके लिए झूठा लगता है। –

+2

इसका मतलब है कि इसमें 'ऑब्जेक्ट [] 'टाइप है। आप 'System.out.println (java.util.Arrays.toString ((ऑब्जेक्ट []) ____) का उपयोग कर सकते हैं) ', जहां सरणी के तत्वों को मुद्रित करने के लिए' ____ 'चर-नाम है। – ruakh

8

आप instanceof ऑपरेटर की तलाश में हैं।

उदाहरण ऑपरेटर किसी ऑब्जेक्ट को किसी निर्दिष्ट प्रकार से तुलना करता है। आप यह जांचने के लिए इसका उपयोग कर सकते हैं कि कोई ऑब्जेक्ट किसी वर्ग का उदाहरण है, उप-वर्ग का एक उदाहरण , या किसी विशेष इंटरफ़ेस को लागू करने वाले वर्ग का उदाहरण।

उदाहरण: "Hello" instanceof String लौट true जबकि new Integer(5) instanceof Stringfalse लौट जाएगा।

2

यदि आपको instanceof का उपयोग करना है तो आपका डिज़ाइन संदेह है। आप यह देखने के लिए जांच कर रहे हैं कि आपके पास स्ट्रिंग, हैश मैप, या हैश मैप सरणी है या नहीं? उसमें छिपाने वाले अमूर्त और जानकारी कहां है?

जावा का ऑब्जेक्ट उन्मुख भाषा। मुझे नहीं पता कि आप किस समस्या को हल कर रहे हैं, लेकिन ऐसा लगता है जैसे आप खो गए हैं। आपको इससे बेहतर अवशोषण के बारे में सोचना चाहिए।

+0

क्या आप मदद कर सकते हैं? यह प्रश्न http://stackoverflow.com/questions/9337536/iterate-recursively-through-deep-hashmap/9337639#9337639 के संदर्भ में था। –

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