2013-04-20 32 views
6

在下面的代码中,我需要Child类中的所有可用属性(即foo, bar)。我对Groovy添加的所有其他属性不感兴趣。Groovy:如何获得以基类声明的属性

class Parent {def foo} 
class Child extends Parent {def bar} 

到目前为止没有这些得到的结果是:

println Child.fields 
println Child.properties.each{k,v->println "$k -> $v"} 
println Child.declaredFields.findAll { !it.synthetic }.collect {it.name} 
println Child.methods.findAll {it.name.startsWith("get")}.collect {it.name} 

我试图找出哪些会给我一些这方面的直接方法。

回答

0

如何检查实例?另外,我在Child

class A { def foo } 
class B extends A { def bar } 

b = new B(foo: 'foo', bar: 'bar') 

assert b.properties == [foo: 'foo', class: B, bar: 'bar'] 
+0

谢谢'extends'一部分,我已经更新有问题的代码。其实在这里我不会有类的实例。我必须获得在类中声明的所有属性,然后根据这些属性向类中添加一些方法。 – kunal 2013-04-20 14:41:21

4

无缘extends这会给你你需要的东西:

assert ['foo', 'class', 'bar'] == B.metaClass.properties*.name 
+0

它也返回''class'',我需要类似'declaredFields'的东西 – kunal 2016-03-29 16:43:00

+0

然后只需添加一个'findAll':'B.metaClass.properties * .name.findAll {it!='class'}' – ender 2016-09-01 14:41:02