2010-10-26 42 views
5

Tôi đang cố gắng liệt kê các thuộc tính (nghĩa là tất cả các thuộc tính có phương thức getter) sử dụng Groovy. Tôi có thể làm điều này bằng cách sử dụng myObj.properties.each { k,v -> println v} và hoạt động tốt. Tuy nhiên, điều đó cũng in cho toàn bộ hệ thống phân cấp siêu lớp. Nếu tôi chỉ muốn liệt kê các thuộc tính cho lớp hiện tại (và không phải là lớp siêu hạng), điều đó có khả thi không?Groovy Liệt kê tất cả các thuộc tính cho lớp

Trả lời

3

Đây là cách tôi đã tấn công nhưng có thể bạn có thể xây dựng trên đó.

class Abc { 

    def a 
    def b 

} 

class Xyz extends Abc { 
    def c 
    def d 
} 

def xyz = new Xyz(c:1,d:2) 

xyz.metaClass.methods.findAll{it.declaringClass.name == xyz.class.name}.each { 
    if(it.name.startsWith("get")) { 
     println xyz.metaClass.invokeMethod(xyz.class,xyz,it.name,null,false,true) 
    } 
} 
+0

nhờ. Đó là những gì tôi đã suy nghĩ, nhưng đã hy vọng có một cách "groovier" để làm điều đó. –

1

Hãy thử những điều sau:

myObj.declaredFields.collect{it.name} 
+0

Điều này sẽ nhận được những thứ mà không phải là tài sản mặc dù. Nó sẽ nhận được tất cả các lĩnh vực - Tôi đã tìm kiếm những thứ với getters chỉ. –

Các vấn đề liên quan