2012-07-16 12 views
14

तुलना में एक अलग मूल्य वापस http://groovy.codehaus.org/Things+you+can+do+but+better+leave+undoneक्यों ग्रूवी .class (.getClass()

  1. के अनुसार एक संपत्ति

की तरह एक वस्तु के प्रकार को एक्सेस करना .getClass के बजाय .class का उपयोग करता है) ठीक है - जब तक आप जानते हैं कि आपके पास किस प्रकार की वस्तु है। लेकिन फिर आपको पर इसकी आवश्यकता नहीं है। अन्यथा, आप शून्य या कुछ और, प्राप्त करने के जोखिम में भाग लेते हैं लेकिन ऑब्जेक्ट की श्रेणी नहीं।

ए = [:] println a.class.simpleName // NullPointerException, क्योंकि a.class शून्य है।

क्या कोई यह समझा सकता है कि यह क्यों है? क्यों .class वापसी कुछ से getClass()

उत्तर

16

अलग करता है क्योंकि जब a नक्शा दिया गया है, a.classa.get("class") रूप ग्रूवी में एक ही है। जैसा कि आप दस्तावेज़ों में उदाहरण में देख सकते हैं, यह शून्य वापस आ जाएगा। यही कारण है कि जब तक आप पूरी तरह से सुनिश्चित नहीं हैं कि वेरिएबल एक मानचित्र नहीं होगा

+0

आह, मैं देख रहा हूँ:

def a = Integer.getClass() def b = Integer.class def c = 1.getClass() def d = 1.class println a println b println c println d 

उत्पादन दे देंगे। तो यह मानचित्र (और कुछ भी समान) के लिए विशिष्ट है। –

5

एक गैर-मानचित्र उदाहरण एक प्रकार की कक्षा और एक उदाहरण के वर्ग के बीच का अंतर है। उदाहरण के .class और .getClass() कुछ प्रकार के अपवादों के साथ इसका प्रकार है, उदा। नक्शे। एक प्रकार का .class, प्रकार है। एक प्रकार की .getClass() उदाहरण के लिए java.lang.Class

है:

class java.lang.Class 
class java.lang.Integer 
class java.lang.Integer 
class java.lang.Integer 
संबंधित मुद्दे