【问题标题】:Groovy List all properties for classGroovy 列出类的所有属性
【发布时间】:2010-10-26 20:00:21
【问题描述】:

我正在尝试使用 Groovy 列出属性(即所有具有 getter 方法的属性)。我可以使用myObj.properties.each { k,v -> println v} 来做到这一点,而且效果很好。但是,这也会打印整个超类层次结构。如果我只想列出当前类(而不是超类)的属性,这可能吗?

【问题讨论】:

    标签: groovy properties


    【解决方案1】:

    这是我破解的一种方法,但也许您可以在此基础上进行构建。

    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)
        }
    }
    

    【讨论】:

    • 谢谢。这就是我的想法,但希望有一种“更时髦”的方式来做到这一点。
    【解决方案2】:

    尝试以下方法:

    myObj.declaredFields.collect{it.name}
    

    【讨论】:

    • 这会得到不是属性的东西。它将获取所有字段 - 我只是在寻找带有 getter 的东西。
    猜你喜欢
    • 2021-10-16
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多