2010-10-26 9 views
5

के लिए सभी गुणों की सूची बनाएं मैं ग्रोवी का उपयोग करके गुणों (यानी सभी गुणों वाले गेटटर विधि) की सूची बनाने की कोशिश कर रहा हूं। मैं इसे myObj.properties.each { k,v -> println v} का उपयोग करके कर सकता हूं और यह ठीक काम करता है। लेकिन, यह भी पूरे सुपरक्लास पदानुक्रम के लिए प्रिंट करता है। अगर मैं सिर्फ मौजूदा वर्ग (और सुपर क्लास नहीं) के गुणों को सूचीबद्ध करना चाहता हूं, तो क्या यह संभव है?ग्रोवी वर्ग

उत्तर

3

यहां एक तरीका है जिसे मैंने हैक किया लेकिन शायद आप इसे बना सकते हैं।

class Abc { 

    def a 
    def b 

} 

class Xyz extends Abc { 
    def c 
    def d 
} 

def xyz = new Xyz(c:1,d:2) 

xyz.metaClass.methods.findAll{it.declaringClass.name == xyz.class.name}.each { 
    if(it.name.startsWith("get")) { 
     println xyz.metaClass.invokeMethod(xyz.class,xyz,it.name,null,false,true) 
    } 
} 
+0

धन्यवाद। यही वह था जो मैं सोच रहा था, लेकिन उम्मीद कर रहा था कि ऐसा करने के लिए "ग्रूवियर" तरीका था। –

1

निम्नलिखित के साथ प्रयास करें:

myObj.declaredFields.collect{it.name} 
+0

यह उन चीज़ों को प्राप्त करेगा जो गुण नहीं हैं। यह सभी क्षेत्रों को प्राप्त करेगा - मैं केवल गेटर्स के साथ चीजों की तलाश में था। –