2013-04-20 13 views
6

次のコードでは、Childクラス(つまりfoo, bar)で利用可能なすべてのプロパティが必要です。 groovyが追加した他のすべてのプロパティには興味がありません。私は私にこれを与えるいくつかの直接的な方法を見つけるためにしようとしていますGroovy:基底クラスで宣言されたプロパティを取得する方法

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} 

:これらの

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

これまでのところ、どれも結果を取得していません。

答えて

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

おかげで、私は、問題のコードを更新しました。実際にここではクラスのインスタンスがありません。クラスで宣言されているすべてのプロパティを取得し、それらのプロパティに基づいていくつかのメソッドをクラスに追加する必要があります。 – kunal

4

extendsを逃した:extends`一部 `ため

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

'class 'も返すので、' declaredFields'のようなものが必要です – kunal

+0

'findAll'を追加してください:' B.metaClass.properties * .name.findAll {it!=' class '} ' – ender

関連する問題