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

관련 문제