使用methodMissing的匿名类

时间:2016-02-11 16:46:42

标签: groovy anonymous-types anonymous-class

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

这有效:

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

def foo(guardCondition) {

    if (guardCondition)
        return new Dummy()

    // ...
}

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

但如果我尝试使用匿名类,则结果是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 } }

“包”方法也不起作用:

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

1 个答案:

答案 0 :(得分:2)

有一个未解决的问题:GROOVY-4862。事实上,它不适用于内部类,无论是否匿名。