オブジェクトFoo内にクロージャーがあり、クロージャー内に「 myStaticMethod 」というメソッドを定義します。これは、オブジェクトFooの外側でクロージャーが呼び出されたときに解決したいものです。また、オブジェクト Foo 内に同じ名前の静的メソッドを「意図的に」持っていることもあります。クロージャーを呼び出すとき、「解決戦略」を DELEGATE_ONLY に設定して、クロージャー内で定義されているmyStaticMethodへの呼び出しをインターセプトします。
私はmissingMethodでそれを達成しようとしましたが、メソッドが傍受されることはありません。私がフーを作るとき。myStaticMethod非静的。メソッドはインターセプトされます。私の解決戦略はDELEGATE_ONLYに設定されていますが、なぜこれが起こっているのかよくわかりません。Foo.myStaticMethod をstatic にするかどうかは問題ではないか、何か不足しています
class Foo {
static myclosure = {
myStaticMethod()
}
static def myStaticMethod() {}
}
class FooTest {
def c = Foo.myclosure
c.resolveStrategy = Closure.DELEGATE_ONLY
c.call()
def missingMethod(String name, def args) {
println $name
}
}