2011-01-21 19 views
13

我可以看到閉包的一些好處,比如它們如何在簡化現有庫的過程中發揮作用,並使未來的設計更容易和更高效。Java中的閉包如何使API設計取代語言設計?

然而,(http://www.javac.info/consensus-closures-jsr.html)在建議草案中提及的關鍵點之一是在2.5節,點e:

(該規範將通過改進語言)

e)使未來的API設計能夠取代用於擴展Java平臺的語言設計。

我很努力地看到這是怎麼回事,當然語言設計就是這樣 - 語言本身的設計,不能被API取代,除非Java打開各種奇怪的API使用閉包來修改語言(我非常懷疑會發生這種情況)。

任何人都可以對此有所瞭解,也許提供了一個事先要求語言更改的示例,但是,隨着閉包的添加,不再需要一?

回答

6

API設計和語言特性在某些點上絕對可以互換。只要看看Java中的同步關鍵字。這是一個關鍵字,但是如果語言足夠非冗長,也可以像API一樣實施。註釋是另一個例子。圍繞@Stateless註釋的另一種方式是使類中的所有方法成爲事務性的,也可以是語言關鍵字。

關閉特別是可以很容易地把一個「代碼塊」交給一個方法,然後這個方法可以做些什麼。

粗例如,每個可以作出:

for_each(myFooList, #(Foo foo) { 
    String something = foo.getBar() + foo.getKaz(); 
    System.out.println(something); 
}); 

也許不是100%乾淨爲具有每個循環由語言的語法直接支持,但它可以讓大家輕鬆體驗具有類似語言的增強功能。

+0

他也在尋找java的一箇舊的關閉提議,其中一個目標是語法甚至更像Ruby(即在`for_each`循環中更少的樣板),而不是他們現在正在討論的語法。 – 2011-01-23 17:18:44

6

對於任何人誰沒有看過提案草案,這裏是從同一個文檔後面更詳細一點:

加入倒閉簡化了Java平臺的發展。 Sun的公共bug數據庫中的許多現有語言RFE可重定向爲接收關閉的方法的API請求。添加庫方法可以滿足未來對附加聲明表單的許多需求。