Я сейчас экспериментирую с замыканиями Groovy и делегатами.У меня есть следующий код, устанавливающий делегат замыкания в другой класс, который прекрасно работает.
def closure = {
newMethod()
};
closure.setDelegate(new MyDelegate());
closure.setResolveStrategy(Closure.DELEGATE_ONLY);
closure();
class MyDelegate {
public void newMethod() {
println "new Method";
}
}
Это печатает «новый метод», показывая, что newMethod () в MyDelegate фактически вызывается.Теперь я пытаюсь сделать то же самое с MethodClosure.
public class TestClass {
public void method() {
newMethod();
}
}
TestClass a = new TestClass();
def methodClosure = a.&method;
methodClosure.setDelegate(new MyDelegate());
methodClosure.setResolveStrategy(Closure.DELEGATE_ONLY);
methodClosure();
class MyDelegate {
public void newMethod() {
println "new Method";
}
}
Однако на этот раз я получаю следующее исключение: Исключение в потоке "main" groovy.lang.MissingMethodException: Нет подписи метода: TestClass.newMethod () применим для типов аргументов: () values: [].
Так что для этого methodClosure не похоже, что он вообще собирается делегату для поиска метода.У меня такое ощущение, что это, вероятно, предполагаемое поведение, но есть ли способы использовать делегатов для MethodClosures?
Большое спасибо.