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

Java 回調機制精講:接口回調模式的實現與應用場景

     編輯:Java 相關知識

什麼是回調?

回調 是一種「雙向調用」約定:A 類持有 B 類的引用並呼叫其方法;B 類在特定時機反向呼叫 A 類實現的介面方法。本質上是好萊塢原則:「不要調用我們,我們會調用你」。

典型應用場景

  • 事件監聽(按鈕點擊、網路回應)
  • 非同步任務完成通知
  • 框架預留擴展點(如 Servlet Filter、Spring InitializingBean)
  • Android Launcher 與 LauncherModel 解耦

最小可行實現(純 Java,無框架依賴)

// 1. 定義回調介面
public interface Callback {
    void before();
    void after();
}

// 2. 被調用方:持有介面引用,在關鍵節點觸發
public class TaskExecutor {
    private final Callback callback;

    public TaskExecutor(Callback callback) {
        this.callback = callback;
    }

    public void execute() {
        callback.before();           // 前置通知
        System.out.println("hello chenyu"); // 核心業務
        callback.after();            // 後置通知
    }
}

// 3. 調用方:實現介面並傳遞 this
public class Client implements Callback {
    private final TaskExecutor executor = new TaskExecutor(this);

    @Override public void before() { System.out.println("hello before"); }
    @Override public void after()  { System.out.println("hello after"); }

    public void start() { executor.execute(); }

    public static void main(String[] args) {
        new Client().start();
    }
}

執行輸出

hello before
hello chenyu
hello after

進階變體:Lambda 簡化(JDK 8+)

// 無需顯式實現類,直接用 Lambda
TaskExecutor executor = new TaskExecutor(() -> System.out.println("前"), 
                                         () -> System.out.println("後"));
executor.execute();

配合 @FunctionalInterface 註解可強制介面為單一抽象方法,進一步簡化。

常見誤區與最佳實踐

總結

接口回調是 Java 實現控制反轉 (IoC) 的基石,掌握其核心模式有助於理解 Spring AOP、Netty ChannelHandler、Retrofit Callback 等主流框架的設計思想。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
誤區後果正確做法
回調方法拋出未檢查異常導致執行方中斷,資源洩漏回調內部捕獲異常或定義 checked exception 讓執行方處理
回調持有外部強引用記憶體洩漏(特別是 Android Activity)使用 WeakReference 或生命週期綁定
同步回調執行耗時操作阻塞調用線程,降低吞吐改為異步回調(CompletableFuture、RxJava、协程)