如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子以及为什么它是一个有用的特性吗?匿名内部类还不够好?
问问题
11174 次
4 回答
16
Closure 是一个Closure 类实例,它实现了 Call 逻辑。它可以作为参数传递或分配给变量。它还有一些与范围变量访问和委托调用有关的逻辑。
方法是普通的 Java 方法。没什么特别的。
是的,匿名内部类有很多样板代码来执行简单的操作。
相比:
button.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e ) {
frame.dispose();
}
}
);
对比
button.addActionListener { frame.dispose() }
SO Groovy上有一个相关问题:闭包或方法 以及以下指向包含许多有用信息的用户指南的链接。
Groovy 中的闭包是一个开放的、匿名的代码块,可以接受参数、返回值并分配给变量。闭包可以引用在其周围范围内声明的变量。与闭包的正式定义相反,Groovy 语言中的闭包还可以包含在其周围范围之外定义的自由变量。虽然打破了闭包的正式概念,但它提供了本章中描述的各种优点。
于 2014-02-20T11:07:31.213 回答
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
于 2014-02-20T13:04:30.360 回答
0
Groovy 中的闭包是一个开放的、匿名的代码块,可以接受参数、返回值并分配给变量。以下链接包含很多有用的信息。 http://www.groovy-lang.org/closures.html
于 2019-03-27T11:31:02.957 回答
0
Call
我认为 Closure 与 Java 中实现方法的功能接口密切相关。它是匿名的,可以有尽可能多的输入,可以返回数据类型。
也许它在定义事件处理程序或侦听器时很有用。
于 2021-09-24T08:55:29.073 回答