介绍JDK 1.8的闭包 - Lambda项目

时间:2012-02-13 22:10:30

标签: closures java

现有的内部类有什么问题,为什么内部类不能用于表示闭包?

目前我会在这里发布一些资源开头。

首先,下面列出了什么是封闭的概述。它与语言无关。我建议阅读它 关闭http://martinfowler.com/bliki/Closure.html

稍后添加

[2007年1月]闭包的定义http://gafter.blogspot.com/2007/01/definition-of-closures.html

END

[2011年12月] Lambda的状态http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

[2007年10月]编程语言高级主题:Java闭包http://www.youtube.com/watch?v=0zVizaCOhME

[2011年1月4日] JSR 292善良:使用invokedynamic http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic进行Lambda到SAM类型转换

2 个答案:

答案 0 :(得分:3)

正如我所理解的那样,Java 8中的闭包计划只是为了减少与内部类的当前变通方法相比的痛苦 - 因为严肃地说,内部类的语法是写简单的lambdas会产生巨大的语法开销。

答案 1 :(得分:0)

内部类可用于完成闭包可以为您做的许多事情。

闭包具有两个主要优点,它们更简单,更简洁,意味着它们更有可能被使用。语言可以更好地理解它们,并且可以以内部类不是的方式进行优化。例如更好地处理特定异常,处理原语。

闭包可用于构建其他第一类方法,例如通过currying。我不确定这是否有多大优势,但绝对不是嵌套类的简单选项。