2012-02-13 50 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