首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

Java 7 新特性:# 語法與閉包 (Lambda) 初探

     編輯:關於JSP

背景

Java 1.4.2 時代,# 僅用於 Javadoc @see 標籤引用方法。Java 7 (原訂 2010 年釋出,後延至 9 月) 引入簡化版閉包,# 成為方法引用與 Lambda 表達式的關鍵符號。

# 語法核心用法

1. 方法引用

String#equals(Object)
java.io.File#exists()

格式:類別名#方法名(參數型別),可作為函數式介面的實例傳遞。

2. 事件監聽器簡化 (範例來自 Cay Horstmann)

傳統匿名內部類別:

button.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Hi!");
        }
    }
);

使用 # 閉包:

button.addActionListener(#(ActionEvent e) System.out.println("Hi!"));

3. 實例方法引用 (範例來自 FSM)

傳統寫法:

public void init() {
    JButton button = ...;
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ev) {
            handleAction(ev);
        }
    });
}
public void handleAction(ActionEvent ev) { /* ... */ }

使用 # 閉包:

public void init() {
    JButton button = ...;
    button.addActionListener(this#handleAction(ActionEvent));
}
public void handleAction(ActionEvent ev) { /* ... */ }

技術意義

  • 將函數提升為「一等公民」,可直接傳遞、儲存、回呼。
  • 解決 Java 單繼承限制:無需為每個介面寫匿名類別,大幅減少樣板碼。
  • 為後續 Java 8 完整 Lambda (->)、方法引用 (::) 與 Stream API 鋪路。

補充說明

Java 7 正式釋出時,閉包提案經多次修訂,最終 Java 8 採用 -> 語法而非 #。本文反映 Java 7 早期提案 (Project Lambda) 設計,具歷史參考價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved