【发布时间】:2010-10-26 20:00:21
【问题描述】:
我正在尝试使用 Groovy 列出属性(即所有具有 getter 方法的属性)。我可以使用myObj.properties.each { k,v -> println v} 来做到这一点,而且效果很好。但是,这也会打印整个超类层次结构。如果我只想列出当前类(而不是超类)的属性,这可能吗?
【问题讨论】:
标签: groovy properties
我正在尝试使用 Groovy 列出属性(即所有具有 getter 方法的属性)。我可以使用myObj.properties.each { k,v -> println v} 来做到这一点,而且效果很好。但是,这也会打印整个超类层次结构。如果我只想列出当前类(而不是超类)的属性,这可能吗?
【问题讨论】:
标签: groovy properties
这是我破解的一种方法,但也许您可以在此基础上进行构建。
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)
}
}
【讨论】:
尝试以下方法:
myObj.declaredFields.collect{it.name}
【讨论】: