你認識“#”麼?讓我猜猜看,應該不太熟吧。因為在Java1.4.2時代,“#”僅僅用於在編寫javadoc的注釋內容,用於鏈接(@see)到對應類的具體方法。除此之外,在編寫代碼的時候,我們幾乎不會用到它。
不過,別驚訝,在Java 7發布之後,“#”或許將成為Java程序員最熟悉的朋友!因為在幾天前(編輯注:本文翻譯於09年11月底,當時Sun剛剛公布說Java 7將包含簡單的閉包),Sun的Java SE和OpenJDK的首席工程師Mark Reinhold,剛剛宣布Java 7將加入一個簡化版的“閉包”特性,其中的關鍵符號,就是“#”。也因為這個原因,Java 7的正式發布時間,將從2010年2月份,推遲到9月份。
在Java 7中,“#”將讓函數方法,成為Java語言的一等公民。下面來看看如何用#語法實現“閉包”的吧:
簡單的方法引用示例:
比如要引用String類的equals方法,應該這麼寫:
String#equals(Object)
再看一個例子:
java.io.File#exists()
事件監聽器1 (代碼示例,來自Cay Horstmann)
使用閉包前:
button.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent ){
System.out.println("Hi!"); }
}
);
使用閉包後 :
button.addActionListener(#(ActionEvent e) System.out.println("Hi!));
事件監聽器2(代碼示例,來自FSM )
使用閉包前:
public void init() {
JButton button = ...;
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
handleAction(ev);
}
});
}
public void handleAction(ActionEvent ev) {
// handle event
}
使用閉包後:
使用閉包後:
public void init() {
JButton button = ...;
button.addActionListener(this#handleAction(ActionEvent));
}
public void handleAction(ActionEvent ev) {
// handle event
}