2012-12-14 13 views
10

मैं यह पूछने के लिए उत्सुक हूं, शायद यह काफी अर्थहीन है।कक्षा के उदाहरण के साथ जावा उदाहरण

जब हम जावा में instanceof का उपयोग कर रहे हैं, जैसे:

if (a instanceof Parent){ //"Parent" here is a parent class of "a" 
} 

कारण है कि हम नीचे की तरह उपयोग नहीं कर सकते:

if (a instanceof Parent.class){ 
} 

दूसरे की दृष्टि से अधिक मतलब 'instanceof' करता है सख्त प्रोग्रामिंग? "अभिभावक" और "माता-पिता" वर्ग के बीच क्या अंतर है?

+0

संबंधित http://stackoverflow.com/questions/496928/what-is-the-difference-between-instanceof-and-class-isassignable से –

+0

संबंधित http://stackoverflow.com/questions/2590640/why-cant -a-class-variable-be-pass-to-instanceof – PeterMmm

+0

नोट: दूसरे दृष्टिकोण के लिए, 'parent.class.isInstance (ए)' उचित जांच होगी। – Vulcan

उत्तर

15

"अभिभावक" और "अभिभावक.क्लास" के बीच क्या अंतर है? प्रकार Class<Parent> का एक उद्देश्य तक पहुँचने का एक तरीका है -

बाद एक शाब्दिक वर्ग है।

पूर्व सिर्फ एक वर्ग है, जो विभिन्न स्थितियों में प्रयोग किया जाता है का नाम है - जब स्थिर तरीकों, कंस्ट्रक्टर्स, कास्टिंग आदि

बुला करता है दूसरा 'instanceof' की दृष्टि से अधिक मतलब सख्त प्रोग्रामिंग?

खैर के रूप में परिभाषित किया गया है भाषा नहीं - instanceofकेवल एक प्रकार के नाम के साथ काम करता है, कभी नहीं एक अभिव्यक्ति। आप लिखते हैं तो हो सकता है

if (a instanceof Parent.class) 

तो मैं चाहते उम्मीद आप लिखने में सक्षम हो है:

Class<?> clazz = Parent.class; 
if (a instanceof clazz) 

... और कहा कि अभी जिस तरह यह काम करता है नहीं है। दूसरी तरफ, Class.isInstance विधि है जिसे आप कॉल कर सकते हैं यदि आप कॉल कर सकते हैं।

पहली जगह "सख्त प्रोग्रामिंग के दृष्टिकोण" से आपका क्या मतलब है?

1

Parent एक वर्ग है, इसलिए दूसरा उदाहरण अधिक समझ में नहीं आता है। आप पूछ रहे हैं कि उदाहरण कक्षा का उदाहरण है, a instanceof Parent उस की एक स्पष्ट प्रत्यक्ष अभिव्यक्ति है।

Parent.class एक उदाहरण Class की है, इसलिए भले ही दूसरे उदाहरण संकलित (यदि ऐसा नहीं instanceof के दाएँ हाथ के ही एक उदाहरण नहीं हो सकता है), इसलिए यह देखना नहीं होगा क्या आप यह चाहते जाँच करने के लिए। :-)

0

Parent एक प्रकार का नाम है। Parent.class अनिवार्य रूप से एक स्थैतिक चर है जो किसी ऑब्जेक्ट को संदर्भित करता है (विशेष रूप से, Class का उदाहरण)। आप पूछना चाहते हैं कि aParent प्रकार का एक उदाहरण है, भले ही यह किसी ऑब्जेक्ट का उदाहरण न हो जो स्वयं किसी अन्य प्रकार का उदाहरण है (नाम Class)।

0

जब आप Parent.class लिखते हैं तो इसका मतलब है कि आप अपने माता-पिता वर्ग के लिए java.lang.Class ऑब्जेक्ट बना रहे हैं। तो if (a instanceof Parent.class){ } यह आपके लिए काम नहीं करेगा।

कक्षा वर्ग पर अधिक जानकारी के लिए निम्न लिंक की एक बार देख ले:
Class

वर्ग कक्षा के उदाहरण एक चल जावा आवेदन में वर्गों और इंटरफेस का प्रतिनिधित्व करते हैं। प्रत्येक सरणी भी उस वर्ग से संबंधित होती है जो क्लास ऑब्जेक्ट के रूप में दिखाई देती है जिसे सभी तत्वों द्वारा समान तत्व प्रकार और आयामों के साथ साझा किया जाता है। आदिम जावा प्रकार (बूलियन, बाइट, चार, लघु, int, लंबा, फ्लोट, और डबल), और कीवर्ड शून्य को क्लास ऑब्जेक्ट्स के रूप में भी दर्शाया जाता है।

0

स्थिर Parent.class सदस्य वास्तव में एक वस्तु है। आप प्रकार Object के एक चर के लिए असाइन करें या टाइप Class यदि आप चाहते थे सकता है:

Object o = Parent.class; 
Class c = Parent.class; 

Parent दूसरी ओर एक वस्तु या एक चर नहीं है: यह एक Type Name है, प्रति जावा कल्पना के रूप में।

Cat myCat = new DomesticLonghair(); 
a instanceof myCat; 

... जो सिर्फ मूर्ख है:

आप यह कर सकता है ...

a instanceof Parent.class 

Parent.class के बाद से एक वस्तु तो आप भी ऐसा कर सकता है feasibly सकता है।

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