java - Java 7 中的闭包如何工作?

标签 java closures

我还没有在 java 7 中使用过闭包,想知道它们是如何工作的以及它们的主要优点或使用它们的最佳用例是什么?

更新:

我应该把作业做得更好。这是Project Lambda site JSR 335:Java 编程语言的 Lambda 表达式。他们声称 Java 8 中将出现闭包。我将不得不进一步研究它,看看是否确实如此。

最佳答案

Java 7 没有闭包。关于它们的传闻已经有很长一段时间了,而且它们显然将出现在 Java 8 中。当然,我已经得到了 promise Ghostbusters传闻中也提到了重启。

但是,您可以使用 anonymous inner classes 来伪造关闭。但请不要误会,这些不是闭包。

至于闭包的好处,我无法比 Stack Overflow 的传奇 @jaif 描述得更好了。从这里post :

“您可以将其视为类的概括。

你的类拥有某种状态。它有一些其方法可以使用的成员变量。

闭包只是让函数访问本地状态的一种更方便的方法。

您不必创建一个知道您希望函数使用的局部变量的类,您可以简单地当场定义该函数,并且它可以隐式访问当前可见的每个变量。

当你用传统的OOP语言定义一个成员方法时,它的闭包是“这个类中所有可见的成员”。

具有“适当”闭包支持的语言只是概括了这一点,因此函数的闭包是“此处可见的所有变量”。如果“这里”是一个类,那么您就有一个传统的类方法。

如果“here”位于另一个函数内,那么您就拥有了函数式程序员所认为的闭包。您的函数现在可以访问父函数中可见的任何内容。

所以这只是一个概括,消除了“函数只能在类内部定义”的愚蠢限制,但保留了“函数可以看到在声明它们时可见的任何变量”的想法。 ”

关于java - Java 7 中的闭包如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577614/

相关文章:

java - 合并时的 JPA OrderColumn 空值

java - 使用 JsonIgnoreProperties 特定属性反序列化属性仅存在于 JSON 中

Javascript fn 在调用时有 2 个参数,但在声明时只有 1 个参数?

c# - LINQifying 我的代码是否值得在闭包中访问 foreach 变量?

python - 在 Python 中将 functools.partial 设置为实例方法

javascript - JavaScript 中的递归闭包

c# - 单元测试方法独立性

java - Java 中有没有类似于 Go 的 Select 的关键字或方法?

javascript - 在本地存储中查找项目值

php - PHP 中的非匿名函数可以使用 'use' 关键字吗?