2013-04-20 25 views
6

Aşağıdaki kodda, Child sınıfında bulunan tüm özelliklere (yani foo, bar) ihtiyacım var. Ben groovy tarafından eklenen tüm diğer özellikleri ile ilgilenmiyorum. Bana bunu verecek bazı direkt yöntem bulmak çalışıyorumGroovy: taban sınıfında bildirilen özellikler nasıl edinilir

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} 

: Bunlardan

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

Şimdiye kadar hiçbiri sonuç alır.

cevap

0

Örnek denetleme hakkında ne düşünüyorsunuz? Ayrıca, ben bu ihtiyacın olanı verecektir 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

Teşekkür, ben söz konusu kod güncelledik. Aslında burada sınıfların örneği olmayacağım. Sınıfta bildirilen tüm özellikleri almalı ve sonra bu özelliklere dayalı olarak bazı yöntemleri ekleyeceğim. – kunal

4

yılında extends cevapsız: extends` parçası `için

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

'' class'' da döndürür, declaredFields'ın ne yaptığı gibi bir şeylere ihtiyacım var – kunal

+0

Sonra sadece 'findAll':' B.metaClass.properties * .name.findAll {it! = 'Class'} ' – ender