首页 文章

获取Groovy类的闭包属性名称

提问于
浏览
2

给出以下Groovy类:

class MyClass {

  def someClosure = {}
  def someClosure2 = {}

  private privateClosure = {

  }

  def someVal = 'sfsdf'

  String someMethod() {}
}

我需要一种方法来检索已分配给它们的闭包的所有公共属性的名称,因此该类的正确结果将是 ['someClosure', 'someClosure2'] .

我可以假设所有感兴趣的类都有一个默认的构造函数,所以如果它使事情变得更容易,我可以通过实例检索属性

def instance = MyClass.newInstance()

1 回答

  • 6

    您只需检查每个groovy属性的值:

    class Test {
        def aClosure = {}
        def notClosure = "blat"
        private privateClosure = {}
    }
    
    t = new Test()
    closurePropNames = t.properties.findResults { name, value ->
        value instanceof Closure ? name : null
    }
    assert closurePropNames == ['aClosure']
    

    私有字段不被视为常规属性,因此它们不会包含在结果中 .

相关问题