2012-02-13 54 views
5

现有的内部类有什么问题,为什么内部类不能用于表示闭包?介绍闭包到JDK 1.8 - Project Lambda

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

首先,下面列出了很好的概述封闭是什么。它是语言不可知的。我推荐读它 封闭http://martinfowler.com/bliki/Closure.html

平添了几分拉姆达以后

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

END

[2011年12月]国家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善良拉姆达到SAM类型转换使用invokedynamic http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic

+0

这不是一个问这些一般性问题的地方,或是发布一般信息。 SO有一套非常具体的指导方针,你的文章违反了其中的几个。请阅读[常见问题]和[问]。 – 2012-02-13 22:14:05

+0

请看http://stackoverflow.com/questions/36636/what-is-a-closure这是一个更普遍的问题。 – alexsmail 2012-02-13 22:19:28

+1

@JimGarrison,我减少了这个问题的范围。我希望现在没问题。 – alexsmail 2012-02-13 22:21:21

回答

0

内部类可以用来做很多的事情倒闭可以做为你。

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

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

+0

我以为它们只是内部类的句法糖(对类型系统有很好的修改),即我们对它们的所有限制仍然适用? – Voo 2012-02-13 22:42:27

+0

请参考上面的链接http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic。当前在Java中关闭闭包的建议是使用内部类而不是MethodHandle。 – alexsmail 2012-02-13 22:45:45

+0

@Voo如果你开始阅读论坛,你会看到有很多人说,它是_fundemantal_在语言中的变化,而不是你和我看到的语法糖。例如,查看http://www.youtube.com/watch?v=0zVizaCOhME上面的链接。 – alexsmail 2012-02-13 22:47:37

3

正如我的理解是,在Java 8倒闭的计划只是为了让更小的疼痛比内部类目前的解决办法 - 因为严重的是,内部类的语法是一个巨大的语法开销写简单的lambda表达式。

+0

所以,它只是“语法糖”? :-) – alexsmail 2012-02-13 22:40:50

+0

我以为是。是吗? – 2012-02-13 22:52:43

+1

那是我的想法。直到我找到了'MethodHandle'。并切换实施关闭和力量。现在,我很困惑。 – alexsmail 2012-02-13 22:58:14