2010-10-26 18 views
5

的所有屬性我試圖列出使用Groovy的屬性(即具有getter方法的所有屬性)。我可以使用myObj.properties.each { k,v -> println v}來做到這一點,並且工作正常。但是,這也可以打印整個超類層次結構。如果我只想列出當前類(而不是超類)的屬性,那可能嗎?Groovy列出類

回答

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

感謝。這就是我的想法,但希望有一個「更加可行」的方式來做到這一點。 – 2010-10-26 21:39:17

1

嘗試用以下:

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

雖然這會得到不屬性的東西。它會得到所有的領域 - 我只用getter來尋找東西。 – 2014-01-27 20:08:21