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

Java 回調機制深度解析:從生活場景到代碼實現的完整圖解

     編輯:Java 綜合教學

Java 回調機制深度解析:從生活場景到代碼實現的完整圖解

生活類比

  • 教師(調用方) → 學生 A(被調用方,能力不足) → 學生 B(具備能力)。
  • A 請求 B 幫忙 → B 計算完成 → 回調 告知 A 結果 → A 向教師匯報。

四大核心角色

  1. Callback 接口:定義回調契約 void solve(int result)。
  2. Class A (StudentA):實現 Callback,持有 B 的引用,發起異步請求。
  3. Class B (StudentB):執行耗時任務,完成後調用 callback.solve(result)。
  4. Client (CallBackTest):組裝 A、B,啟動流程。

代碼實現

// 1. 回調接口
public interface CallBack { void solve(int result); }

// 2. A 類:實現接口,持有 B 引用
public class StudentA implements CallBack {
    private StudentB mStuB;
    public StudentA(StudentB stuB) { this.mStuB = stuB; }
    public void askQuestion(final int a, final int b) {
        new Thread(() -> mStuB.executeMessage(this, a, b)).start(); // 異步
    }
    @Override public void solve(int result) { System.out.println("結果:" + result); }
}

// 3. B 類:執行任務,回調 A
public class StudentB {
    public void executeMessage(CallBack cb, int a, int b) {
        int result = a + b;
        cb.solve(result); // 關鍵:父類引用指向子類對象,多態調用
    }
}

// 4. 啟動
public class CallBackTest {
    public static void main(String[] args) {
        StudentB b = new StudentB();
        StudentA a = new StudentA(b);
        a.askQuestion(1, 1); // 輸出:結果:2
    }
}

關鍵點總結

  • 雙向依賴:A 持有 B 引用(正向),B 持有 Callback 引用(反向,實為 A)。
  • 多態:B 僅依賴 Callback 接口,解耦具體實現。
  • 異步友好:配合 Thread/Executor 實現非阻塞回調,避免主線程等待。
  • 應用場景:事件監聽、異步 IO 完成通知、框架擴展點(Spring InitializingBean、ServletContextListener)。

參考延伸

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