2010-10-26 10 views
5

Ich versuche, die Eigenschaften (d. H. Alle Eigenschaften, die eine Getter-Methode haben) mit Groovy aufzulisten. Ich kann dies mit myObj.properties.each { k,v -> println v} tun, und das funktioniert gut. Aber das druckt auch für die gesamte Superklassenhierarchie. Wenn ich nur die Eigenschaften für die aktuelle Klasse (und nicht die Super-Klasse) auflisten möchte, ist das möglich?Groovy Liste alle Eigenschaften für Klasse

Antwort

3

Hier ist ein Weg, den ich gehackt habe, aber vielleicht können Sie darauf aufbauen.

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

Dank. Das habe ich mir gedacht, aber ich hatte gehofft, dass es einen "groovigeren" Weg gibt. –

1

Versuchen mit den folgenden:

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

Das wird Dinge bekommen, die keine Eigenschaften sind. Es wird alle Felder bekommen - ich habe nur mit Gettern nach Dingen gesucht. –

Verwandte Themen