使用 methodMissing 的匿名 class

Anonymous class with methodMissing

对于我正在编写的 DSL,有时我想 return 一个忽略所有调用的虚拟对象。

这个有效:

class Dummy {
    def methodMissing(String name, args) { print "Ignoring: "+name+" "+args }
}

def foo(guardCondition) {

    if (guardCondition)
        return new Dummy()

    // ...
}

foo(true).with { bar('baz') }

但如果我尝试使用匿名 class,结果会出现类似 No signature of method: <filename>.bar() is applicable for argument types: (java.lang.String) values: [baz]

的错误

即这不起作用:

    if (guardCondition)
        return new Object() { def methodMissing(String name, args) { print "Ignoring: "+name+" "+args } }

"bag" 方法也行不通:

    if (guardCondition)
        return [ methodMissing : { name, args -> print "Ignoring: "+name+" "+args } ]

有一个关于此的未决问题:GROOVY-4862。事实上,它在内部 class 中不起作用,无论是否匿名。