2

给定以下 Groovy 类:

class MyClass {

  def someClosure = {}
  def someClosure2 = {}

  private privateClosure = {

  }

  def someVal = 'sfsdf'

  String someMethod() {}
}

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

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

def instance = MyClass.newInstance()
4

1 回答 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']

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

于 2013-05-23T16:47:39.370 回答