我还没有在 java 7 中使用闭包,想知道它们是如何工作的,它们的主要优势或使用它们的最佳用例是什么?
更新:
我应该做得更好。这是 JSR 335 的Lambda项目站点:Java 编程语言的 Lambda 表达式。他们声称 clousures 将出现在 Java 8 中。我将不得不更多地研究它,看看是否真的如此。
Java 7 没有闭包。他们已经传了很长时间,而且他们显然将出现在 Java 8 中。当然,我已经得到了一个传闻中的捉鬼敢死队重启的承诺。
但是,您可以使用匿名内部类来伪造闭包。但请不要误会,这些不是闭包。
至于闭包的好处,我不能比这篇文章中的 Stack Overflow 传奇@jaif更好:
“你可以把它看作是一个类的概括。
您的班级拥有某种状态。它有一些其方法可以使用的成员变量。
闭包只是让函数访问本地状态的一种更方便的方法。
不必创建一个知道您希望函数使用的局部变量的类,您可以简单地在现场定义函数,并且它可以隐式访问当前可见的每个变量。
当你在传统的 OOP 语言中定义一个成员方法时,它的闭包是“这个类中所有可见的成员”。
具有“适当”闭包支持的语言简单地概括了这一点,因此函数的闭包是“这里所有可见的变量”。如果“这里”是一个类,那么你有一个传统的类方法。
如果“这里”在另一个函数中,那么你就有了函数式程序员所认为的闭包。您的函数现在可以访问在父函数中可见的任何内容。
所以这只是一个概括,消除了“函数只能在类内部定义”的愚蠢限制,但保留了“函数可以在声明它们的时候看到任何可见的变量”的想法。"