2016-02-11 2 views
0

Для DSL Я пишу, я хотел бы иногда возвращать фиктивный объект, который просто игнорирует все вызовы.Анонимный класс с методомMissing

Это работает:

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

ответ

2

Существует открытый вопрос об этом: GROOVY-4862. Фактически, он не работает во внутреннем классе, анонимным или нет.

Смежные вопросы