我在对象Foo中有一个闭包,在闭包内部我定义了一个名为' myStaticMethod ' 的方法,一旦在对象Foo外部调用闭包,我想解决它.我也碰巧在我的对象Foo中使用相同名称的"有目的"静态方法.当我调用闭包时,我将'resolve strategy'设置为DELEGATE_ONLY来拦截对闭包中定义的myStaticMethod的调用.
我试图通过missingMethod实现这一点,但该方法从未被截获.当我做Foo.myStaticMethod非静态,该方法被截获.虽然我的解决策略设置为DELEGATE_ONLY,但我不太明白为什么会发生这种情况.让Foo.myStaticMethod静止与否应该无关紧要或者我错过了什么
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
}
}
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我最终在调用FooTests中的闭包之前重写了invokeMethod
Foo.metaClass.'static'.invokeMethod = { String name, args ->
println "Static Builder processing $name "
}
Run Code Online (Sandbox Code Playgroud)
在尝试解决这个问题时,我发现了一种非常奇怪的方法来拦截缺少的静态方法.将来可能对你们有些人有用.
static $static_methodMissing(String name, args) {
println "Missing static $name"
}
Run Code Online (Sandbox Code Playgroud)
-Ken
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |