提问人:trunkc 提问时间:9/23/2008 更新时间:7/28/2012 访问量:2895
Java 中闭包的现状如何?
What’s the current state of closures in Java?
答:
在创建 Java SE 7 JSR(大概是由 Danny Coward 创建)并组建专家组并选择内容之前,它是未知的。
我的 Java 7 页面是关于 Java 7 的链接的集合,并且包含指向所有闭包提案和博客条目的链接:
http://tech.puredanger.com/java7#closures
我维护着一个 Java 7 链接博客,您可以在其中找到有关闭包和其他内容的链接:
如果你想要我的观点,你可能会发现我的 Java 7 预测博客文章也很有趣:http://tech.puredanger.com/2008/08/02/java7-prediction-update/
更新:Mark Reinhold 在 12 月 8 日的 Devoxx 大会上表示,由于对如何实现缺乏共识,Java 7 中不会包含闭包。
目前有几个相互竞争的提案,BGGA、CICE等。不幸的是,关于最佳方法的激烈争论仍然存在。因此,由于接受过程的保守性,目前闭包不太可能进入 Java 7。
这里的关键问题是,在不无意中引入显着复杂性的情况下,向预先存在的语言添加功能可能非常困难。这就是 Java 1.5 中泛型的经验,许多人担心它会随着闭包的引入而变得更加复杂。
我的建议是,如果你真的想访问现代语言功能,比如闭包,但又希望留在 Java 生态系统中,你应该看看 Scala。
评论
Groovy 是我见过的最好的 Java 替代品,它包含动态语言的功能,包括闭包、运行时类扩展等。虽然 Ruby 在设计上有一点优势,但我不得不说,Groovy 编译成 Java 字节码并在没有任何接口代码的情况下与 Java 交互,这是一个不容忽视的巨大优势。
显然,Closures 不会出现在 Java 7 中。 看到这个和这个。
Java 7 中不会明确存在闭包,但如果您现在正在寻找一个更轻量级的解决方案来在 java 中使用闭包,请查看它们是如何在 lambdaj 库中实现的:
http://code.google.com/p/lambdaj/wiki/Closures
在 Devoxx 2008 上,Mark Reinhold 明确表示 Java 7 中不会包含闭包。
等!闭包将包含在 Java 7 中。Mark Reinhold 在 Devoxx 2009 上宣布了这一逆转。
保护那个!闭包(lambda 表达式)已推迟到 Java 8。有关更多信息,请关注 Project Lambda (JSR 335)。
评论
上一个:如何编写通用的记忆函数?
下一个:Java 需要闭包吗?
评论