你認識“#”么?讓我猜猜看,應該不太熟吧。因為在Java1.4.2時代,“#”僅僅用于在編寫javadoc的注釋內容,用于鏈接(@see)到對應類的具體方法。除此之外,在編寫代碼的時候,我們幾乎不會用到它。
不過,別驚訝,在Java 7發布之后,“#”或許將成為Java程序員最熟悉的朋友!因為在幾天前(編輯注:本文翻譯于09年11月底,當時Sun剛剛公布說Java 7將包含簡單的閉包),Sun的Java SE和OpenJDK的首席工
在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
}
新聞熱點
疑難解答