Groovy-закрытие vs методы-разница
Если вы внимательно посмотрите на изображение, вы заметите, что вы можете рефакторировать Groovy-код с помощью Eclipse IDE и преобразовать метод в закрытие и наоборот. Итак, что же такое закрытие и чем оно отличается от метода? Может ли кто-нибудь привести хороший пример использования закрытия, а также почему это полезная функция? Анонимные внутренние классы были недостаточно хороши?
2 ответов
закрытие-это экземпляр класса закрытия, который реализует логику вызова. Он может передаваться как аргумент или присваиваться переменной. Он также имеет некоторую логику, связанную с доступом к переменной области и делегированием вызовов.
методы обычного методы Java. Ничего особенного.
и да, анонимные внутренние классы имеют много шаблонного кода для выполнения простых действий.
сравниваем:
button.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e ) {
frame.dispose();
}
}
);
vs
button.addActionListener { frame.dispose() }
там это вопрос о так Groovy: закрытие или методы и 3 ссылки на руководство пользователя, содержащее много полезной информации.
кроме того, поскольку замыкания являются объектами первого класса, их можно передавать, возвращать и управлять. Подумайте:
def add = { n, m -> n + m }
def add2 = add.curry( 2 )
assert add2( 4 ) == 6
def makeAdder = { n ->
// return a Closure
{ m -> n + m }
}
def anotherAdd2 = makeAdder( 2 )
assert anotherAdd2( 4 ) == 6