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']

プライベート フィールドは Groovy プロパティとは見なされないため、結果には含まれません。

于 2013-05-23T16:47:39.370 に答える