2012-01-17 8 views
6

संभव डुप्लिकेट:
Does Java guarantee that Object.getClass() == Object.getClass()?क्या जावा में == के साथ java.lang.Class ऑब्जेक्ट्स की तुलना कर सकते हैं?

अगर मैं एक वर्ग है जैसे

Class<? extends MyObject> aClass = ...; 

मैं तो कर सकते हैं:

if (aClass == MySubObject.class) { ... } 

या मैं

if (aClass.equals(MySubObject.class)) { ... } 

इसके अलावा क्या करना है, आगे जवाब जानने के लिए, मैं एक संदर्भ अर्थात जहां इस परिभाषित किया गया है पता करने के लिए प्यार होता है।

यदि संभव हो तो मैं == का उपयोग करना पसंद करता हूं, क्योंकि मुझे इसे अधिक पठनीय और तेज़ लगता है। (जाहिर है यह नहीं इतना अधिक पठनीय, या इतना तेजी से, लेकिन अभी भी, क्यों एक अधिक जटिल समाधान का उपयोग करता है, तो एक सरल समाधान उपलब्ध है।)

+1

http://stackoverflow.com/questions/3738919/does-java-guarantee-that-object-getclass-object-getclass –

+0

एक और एक http://stackoverflow.com/questions/928531/does-java-have -न-द-ऑफ-ऑफ-क्लास-टेस्ट-विधि –

+0

http://stackoverflow.com/questions/5997801/java-comparing-classes-with-or-equals-is-there-a-difference –

उत्तर

7

आप == उपयोग कर सकते हैं, लेकिन आप कुछ भी नहीं हासिल है कि वास्तव में है, क्योंकि क्या Class.equals() करता है।

कक्षा एक समान विधि को परिभाषित नहीं करती है, इसलिए यह ऑब्जेक्ट से प्राप्त होती है। आप इसे देखने के लिए स्रोत पढ़ सकते हैं।

मैं equals का उपयोग करता हूं जहां संभव है कि मुझे इसके बारे में सोचने की आवश्यकता नहीं है। जब मैं कोड पढ़ रहा हूं (मेरे कोड सहित) मुझे अभी भी खुद को पूछने की आवश्यकता नहीं है ==equals जैसा ही है या इस कक्षा के लिए नहीं है।

+5

हां, आप कुछ हासिल करें: '==' शून्य सुरक्षित है। – yankee

+5

@yankee सच है, इस मामले में आप लिख सकते हैं। 'MySubObject.class.equals (Aclass)' –

5

आप == साथ वर्गों की तुलना कर सकते हैं, और उस Class के मामले के लिए equals के रूप में एक ही बात है, लेकिन अपने उदाहरण से पता चलता है कि आप एक वर्ग एक "है-एक" दूसरे के साथ संबंध नहीं है कि क्या जानना चाहते हैं। दो वर्ग केवल तभी समान होते हैं जब वे एक ही कक्षा हों, और स्पष्ट रूप से Vehicle.class != Car.class

आप को पता है कि क्या एक Car है-एक Vehicle चाहते हैं, Class#isAssignableFrom का उपयोग करें।

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