दिलचस्प पोस्ट
जब आप encodeuri / encodeurcomponent के बजाय भागने का उपयोग करना चाहते हैं? Dict.items () और dict.iteritems () के बीच अंतर क्या है? सी प्रोग्रामिंग में Fflush (stdin) का उपयोग क्या है एंड्रॉइड एनीमेशन ऑन एनीमेशन पर समाप्त नहीं हुआ है पूर्णांक के साथ पूर्णांक की तुलना क्यों जावा में NullPointerException फेंक सकते हैं? घातक चेतावनी प्राप्त की गई: SSLHandshakeException के माध्यम से हैंडशेक_फाइल कैसे अजगर शब्दकोश में यादृच्छिक मूल्य प्राप्त करने के लिए मैं SQL के GETDATE () और DATEADD () को LINQ से SQL अभिव्यक्ति में कैसे उपयोग करूं? PHP में दो तिथियों की तुलना कैसे करें अवतरणों के बिना ऑब्जेक्ट कीज़ और उद्धरण चिह्नों के बीच क्या अंतर है? getCurrentPosition () और watchPosition () असुरक्षित मूल पर बहिष्कृत कर रहे हैं मैं एक jQuery काउंटडाउन कैसे बना सकता हूँ टंकण दशमलव संख्या नहीं राउंड ऑफ सी # शब्दकोश एक महत्वपूर्ण कई मान == ऑपरेटर का प्रयोग करके फ़्लोट / डबल वैल्यू की तुलना करना

ऑब्जेक्ट की क्लास (जावा में) कैसे निर्धारित करें?

यदि कक्षा बी और कक्षा सी कक्षा ए का विस्तार करते हैं और मेरे पास बी या सी प्रकार का एक ऑब्जेक्ट है, तो मैं यह कैसे तय कर सकता हूं कि यह किस तरफ इन्स्ता है?

वेब के समाधान से एकत्रित समाधान "ऑब्जेक्ट की क्लास (जावा में) कैसे निर्धारित करें?"

if (obj instanceof C) { //your code } 

Object.getClass का उपयोग करें () यह ऑब्जेक्ट के रनटाइम प्रकार देता है

एकाधिक सही उत्तर प्रस्तुत किए गए थे, लेकिन अभी भी और भी अधिक तरीके हैं: Class.isAssignableFrom() और बस ऑब्जेक्ट को डालने का प्रयास (जो Class.isAssignableFrom() फेंक ClassCastException )

संभव तरीके संक्षेप में

मैं परीक्षण करने के संभावित तरीकों को संक्षेप में बताता हूं यदि कोई ऑब्जेक्ट obj प्रकार का एक उदाहरण है C :

 // Method #1 if (obj instanceof C) ; // Method #2 if (C.class.isInstance(obj)) ; // Method #3 if (C.class.isAssignableFrom(obj.getClass())) ; // Method #4 try { C c = (C) obj; // No exception: obj is of type C or IT MIGHT BE NULL! } catch (ClassCastException e) { } // Method #5 try { C c = C.class.cast(obj); // No exception: obj is of type C or IT MIGHT BE NULL! } catch (ClassCastException e) { } 

null हैंडलिंग में अंतर

हालांकि null संभाल में अंतर है:

  • पहले 2 तरीकों में अभिव्यक्ति false obj यदि obj null ( null किसी भी चीज का उदाहरण नहीं है)।
  • तीसरी विधि ने स्पष्ट रूप से एक NullPointerException फेंक दिया होगा।
  • इसके विपरीत 4 व 5 वीं विधियां null मानती हैं क्योंकि किसी भी प्रकार की null को डाला जा सकता है!

याद करने के लिए: null किसी भी प्रकार का एक उदाहरण नहीं है , लेकिन इसे किसी भी प्रकार का डाली जा सकता है

टिप्पणियाँ

  • Class.getName() को " Class.getName() -इंस्टेंस-ऑफ" टेस्ट का उपयोग करने के लिए इस्तेमाल नहीं किया जाना चाहिए क्योंकि ऑब्जेक्ट C प्रकार की नहीं C लेकिन इसका एक उपवर्ग है, इसमें पूरी तरह अलग नाम और पैकेज हो सकता है (इसलिए क्लास का नाम स्पष्ट रूप से होगा मैच नहीं है) लेकिन यह अभी भी C प्रकार C
  • उसी विरासत के लिए Class.isAssignableFrom() सममित नहीं है :
    obj.getClass().isAssignableFrom(C.class) false लौटाएगा यदि obj का प्रकार C उपवर्ग C

आप उपयोग कर सकते हैं:

 Object instance = new SomeClass(); instance.getClass().getName(); //will return the name (as String) (== "SomeClass") instance.getClass(); //will return the SomeClass' Class object 

HTH। लेकिन मुझे लगता है कि ज्यादातर समय नियंत्रण प्रवाह या कुछ इसी तरह का उपयोग करने के लिए कोई अच्छा अभ्यास नहीं है …

सुझाए गए किसी भी तरीके का कोई भी उपयोग कोड गंध माना जाता है जो कि खराब ओओ डिजाइन में आधारित है।

यदि आपका डिज़ाइन अच्छा है, तो आपको अपने आप को getClass() या instanceof उपयोग की आवश्यकता नहीं मिलनी चाहिए।

सुझाए गए तरीकों में से कोई भी ऐसा करेगा, लेकिन कुछ ही चीज़ों को ध्यान में रखना, डिजाइन-वार

" Class " कक्षा में भी एक .isInstance विधि है। यदि आप मेरे myBanana.getClass() माध्यम से किसी ऑब्जेक्ट का वर्ग प्राप्त करते हैं, तो आप देख सकते हैं कि आपका ऑब्जेक्ट myApple एक ही क्लास का एक उदाहरण है myBanana जरिए myBanana

 myBanana.getClass().isInstance(myApple) 

हम इस मामले में प्रतिबिंब का उपयोग कर सकते हैं

 objectName.getClass().getName(); 

उदाहरण:-

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getClass().getName(); } 

इस मामले में आपको उस वर्ग का नाम मिलेगा, जो ऑब्जेक्ट को HttpServletRequest इंटरफ़ेस फ़ॉरफ़ायर चर के पास भेजते हैं।