Я думаю, что Майкл Боргвардт по существу прав. Реализация, предоставляемая вами через синтаксис фигурных скобок, обеспечивает реализацию метода , которая используется для ВСЕХ определений интерфейса :
interface X { void f(); void g(int n); void h(String s, int n); }
x = {Object[] args -> println "method called with $args"} as X
x.f()
x.g(5)
x.h("a string",2)
Если вы хотите сделать замыкание с реализацией метода для метода, используйте этот альтернативный синтаксис:
interface X
{ void f(); void g(int n); void h(String s, int n); }
x = [
f: {println "f is called"},
g: {int i-> println "g is called with param ${i}"},
h: {Object[] args -> println "h is called with ${args}"}
] as X
x.f()
x.g(5)
x.h("a string",2)
Для получения дополнительной информации см. Следующее: