2013-04-20 73 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