This question already has answers here:
Closure in Java 7 [closed]
(7个答案)
6年前关闭。
我还没有在Java 7中使用闭包,并且想知道它们如何工作,以及在利用它们时的主要优势或最佳用例是什么?
更新:
我应该做得更好。这是JSR 335的Project Lambda site:Java编程语言的Lambda表达式。他们声称,clousures将在Java 8中使用。我将不得不对其进行更多研究,以查看是否确实如此。
(7个答案)
6年前关闭。
我还没有在Java 7中使用闭包,并且想知道它们如何工作,以及在利用它们时的主要优势或最佳用例是什么?
更新:
我应该做得更好。这是JSR 335的Project Lambda site:Java编程语言的Lambda表达式。他们声称,clousures将在Java 8中使用。我将不得不对其进行更多研究,以查看是否确实如此。
最佳答案
Java 7没有闭包。谣言已经存在很长时间了,并且显然已经设置为出现在Java 8中。当然,也有传言称我会得到Ghostbusters重新引导。
但是,您可以使用anonymous inner classes伪造闭包。但是请不要误会,这些不是闭包。
至于闭包的好处,我不能比这个@jaif中的Stack Overflow图例post更好:
“您可以将其视为类的概括。
您的班级拥有某种状态。它具有一些其方法可以使用的成员变量。
闭包只是使函数访问本地状态的一种更方便的方法。
不必创建一个知道要使用该函数的局部变量的类,您只需在现场定义该函数即可,它可以隐式访问当前可见的每个变量。
当您使用传统的OOP语言定义成员方法时,其关闭是“该类中所有可见的成员”。
具有“适当”闭包支持的语言只是将其概括化,因此函数的闭包是“此处可见的所有变量”。如果“这里”是一个类,则您具有传统的类方法。
如果“ here”在另一个函数内部,则您具有函数程序员认为的闭包。您的函数现在可以访问父函数中可见的任何内容。
因此,这只是一个概括,消除了“函数只能在类内部定义”的愚蠢限制,但保留了“函数可以在声明点看到任何可见变量的想法”。 ”