2010-03-18 5 views
15

MyClass.class और MyClass.getClass() को कॉल करने के बीच क्या अंतर है, दोनों java.lang.Class लौटने लगते हैं। क्या कोई सूक्ष्म भेद है या क्या उन्हें एक दूसरे के रूप में इस्तेमाल किया जा सकता है? इसके अलावा, MyClass.class सुपरक्लास Class कक्षा की सार्वजनिक संपत्ति है? (मुझे पता है कि यह अस्तित्व में है लेकिन javadocs में इसका कोई उल्लेख नहीं दिख रहा है)MyClass.class और MyClass.getClass()

उत्तर

19

एक एक उदाहरण विधि है, इसलिए यह विशेष वस्तु का वर्ग लौटाता है, दूसरा कक्षा निरंतर है (यानी संकलन समय)।

Class n = Number.class; 
Number o = 1; 
o.getClass() // returns Integer.class 
o = BigDecimal.ZERO; 
o.getClass(); // returns BigDecimal.class 

दोनों मामले क्लास ऑब्जेक्ट के उदाहरण लौटाते हैं, जो किसी विशेष जावा क्लास का वर्णन करते हैं। एक ही कक्षा के लिए, वे एक ही उदाहरण लौटाते हैं (प्रत्येक वर्ग के लिए केवल एक वर्ग वस्तु है)।

एक तीसरा रास्ता कक्षा वस्तुओं को पाने के लिए किया जाएगा

Class n = Class.forName("java.lang.Number"); 

ध्यान रखें कि यह भी इंटरफेस में रखें है कक्षा वस्तुओं (जैसा कि उपरोक्त संख्या के रूप में)।

इसके अलावा, MyClass.class superclass क्लास क्लास की सार्वजनिक संपत्ति है?

यह एक भाषा कीवर्ड है।

+1

आपका क्या मतलब है प्रिंट होगा एक "वर्ग निरंतर" द्वारा के संदर्भ प्रकार की ओर इशारा करते के लिए इसी है? जब आप "कक्षा n = Number.class" असाइन करते हैं; एन का मूल्य क्या होगा? – Mocha

+1

एन कक्षा का एक उदाहरण असाइन किया गया है, ऑब्जेक्ट संख्या "वर्ग" (जो वास्तव में एक इंटरफ़ेस है) का वर्णन करता है। – Thilo

4

MyClass में एक स्थिर getClass विधि नहीं है, दूसरे शब्दों में, आप MyClass.getClass() को कॉल नहीं कर सकते हैं, इसके बजाय आपको इसे कॉल करने के लिए (new MyClass())। GetClass() को कॉल करने की आवश्यकता है।

getClass() एक MyClass.class ऑब्जेक्ट लौटाएगा। तो दूसरे शब्दों में, MyClass.class परिणामस्वरूप ऑब्जेक्ट है जबकि getClass() एक विधि है। getClass() विधि मामलों में जहां आप वस्तु के वास्तविक वर्ग पता नहीं है में उपयोगी है, उदाहरण के लिए:

 

public void someMethod(Object o) { 
    if(o.getClass().equals(Set.class)) { 
     // The object is a set 
    } else if(o.getClass().equals(List.class)) { 
    // The object is a List 
    } 
} 
 

ध्यान दें कि उपरोक्त कोड उदाहरण सबसे अच्छा संभव नहीं है, मैं सिर्फ कोशिश कर रहा हूँ दिखाएं कि इसका इस्तेमाल कैसे किया जा सकता है। एक ही कार्यक्षमता के साथ if(o instanceof Set) { ...}

5

.getClass(), वस्तु के क्रम वर्ग रिटर्न तो यह संशोधित किया जा सकता है जब आप दूसरी तरफ चर

.class के वर्ग बदलने के हमेशा के वर्ग निरंतर वापसी प्राप्त किया जा सकता "प्रकार"

नोट
क्रम वर्ग प्रकार वर्ग के रूप में ही होता है, दोनों बराबर हो जाएगा। उदाहरण:

Long x = new Long(2); 
Class c1 = Long.class; 
Class c2 = x.getClass(); 

//c1==c2 
+0

"। दूसरी ओर क्लास हमेशा" टाइप "के वर्ग निरंतर लौटाता है -> इसका क्या अर्थ है? – Mocha

+1

@ मोचा 'लांग' एक प्रकार है,' नया लांग (2) 'उस प्रकार का नया ऑब्जेक्ट है – MBO

1
What's the difference between calling MyClass.class and MyClass.getClass() 

अपने सभी प्रश्न का शीर्षक पहले थोड़ा भ्रामक है! .getClass() is a method defined in java.lang.Object इसलिए जावा में कोई ऑब्जेक्ट इसे कॉल कर सकता है जहां क्लास को क्लास पर ही कॉल किया जाता है (सार्वजनिक स्थिर चर जैसे)। तो सवाल यह वास्तविक मतभेद

.getClass() java.lang.Object में एक देशी जावा तरीका है करने के लिए (जावा नामकरण सम्मेलनों के लिए चिपके हुए) होना चाहिए

What's the difference between calling MyClass.class and myClassObject.getClass() 

अब।यह विधि java.lang.Class ऑब्जेक्ट को उस ऑब्जेक्ट के runtime class से संबंधित करेगी जिस पर इसे लागू किया जाता है। तो

Test t = new TestSubClass(); 
    Class c2 = t.getClass(); 
    System.out.println(c2); 

class TestSubClass

जहां के रूप में .class स्थिर का मूल्यांकन (संकलन समय पर जाना जाता है) वर्ग वापस आ जाएगी प्रिंट होगा। यह वास्तव में कक्षा वस्तु वास्तविक object.So

Test t = new TestSubClass(); 
    Class c2 = Test.class; 
    System.out.println(c2); 

class Test

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