29

我听说闭包可能会在计划于明年夏天左右发布的下一个 Java 标准中引入。

这种语法会是什么样子?

我在某处读到,在 java 中引入闭包比在 java 5 中的泛型变化更大。这是真的吗?优点和缺点?

(到目前为止,我们肯定知道闭包不会包含在下一个 Java 版本中)

或者

编辑:http ://puredanger.com/tech/2009/11/18/closures-after-all/ :D

编辑2:重新思考JDK7:http: //blogs.oracle.com/mr/entry/rethinking_jdk7

编辑3:没有一刻可以失去!: http: //blogs.oracle.com/mr/entry/quartet

4

9 回答 9

17

看看http://www.javac.info/

看起来是这样的:

boolean even = { int x => x % 2 == 0 }.invoke(15);

{ int x => x % 2 == 0 }是闭包。

于 2008-10-24T13:49:35.293 回答
13

这真的取决于引入了什么,以及是否会引入。有许多不同规模的关闭提案。

有关建议和各种博客文章,请参阅Alex Miller 的 Java 7 页面

就我个人而言,我很想看到关闭——它们很漂亮,而且非常有用——但我担心其中一些建议是相当多毛的。

于 2008-10-24T13:50:08.507 回答
11

在 2009 年 11 月,这个问题发生了令人惊讶的大转弯,现在Java 7中将添加闭包。

更新

Java 7 中的闭包(AKA lambdas 表达式)没有发生。它们最终在 2014 年被添加到 Java 8 的第一个版本中。

于 2009-05-04T23:25:40.223 回答
4

不幸的是,您不会在 Java 7 中找到闭包。如果您正在寻找更轻的解决方案来在 Java 中使用闭包,请查看 lambdaj 项目:

http://code.google.com/p/lambdaj/

于 2009-09-12T07:34:08.513 回答
3

这是 java 7 的特性http://tech.puredanger.com/java7/#switch的例子非常有用。

于 2008-10-24T13:54:48.793 回答
3

请注意,“函数类型”实际上是提案下的类型:

{int => boolean} evaluateInt;    //declare variable of "function" type
evaluateInt = {int x => x % 2 }; //assignment
于 2008-10-24T15:21:53.737 回答
2

我认为关于最终将使用什么语法仍然存在很多争论。如果由于所有这些原因,它确实进入了 Java 7,我实际上会感到非常惊讶。

于 2008-10-24T17:54:33.473 回答
2

如果没有任何类型的推断,闭包将会非常冗长...... :(

于 2010-05-10T23:19:21.783 回答
1

闭包有一些严重的边缘情况。我会说闭包是比泛型更重要的变化,而后者仍然有一些毛茸茸的边缘情况。例如,Java Collections 库不能在没有警告的情况下编写/编译。

于 2009-05-08T20:08:21.000 回答