回调函数

179 阅读2分钟

一、回调函数原理

在 Java 中,‌回调方法(Callback) ‌ 是一种允许代码在特定事件或条件满足时自动触发的机制 回调常用于异步编程、事件监听和自定义逻辑注入等场景。

回调的原理

  1. 接口定义‌:通过接口定义回调方法的签名(方法名、参数、返回值)。
  2. 实现接口‌:调用方实现接口中的方法,定义具体的回调逻辑。
  3. 传递引用‌:将实现了接口的对象传递给被调用方。
  4. 触发回调‌:被调用方在特定事件或条件满足时,调用接口方法。 也可以如下描述:
  5. Class A实现接口CallBack callback——背景1 (调用方)
  6. class A中包含一个class B的引用b ——背景2 (调用方)
  7. class B有一个参数为callback的方法f(CallBack callback) ——背景3
  8. A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
  9. 然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D

具体写法示例

1. 定义回调接口

public interface Callback {
    void onComplete(String result);  // 定义回调方法
}

2. 被调用方:处理任务并触发回调

    public void doWork(Callback callback) {
        // 模拟耗时任务
        String result = "任务完成!";
        // 触发回调
        callback.onComplete(result);
    }
}

3. 调用方:实现回调接口

    public static void main(String[] args) {
        Worker worker = new Worker();
        
        // 传统写法:匿名内部类
        worker.doWork(new Callback() {
            @Override
            public void onComplete(String result) {
                System.out.println("回调结果:" + result);
            }
        });

    }
}

异步回调示例

如果需要在异步任务中触发回调(例如多线程),可以结合 RunnableExecutorService

    public void doAsyncWork(Callback callback) {
        new Thread(() -> {
            try {
                Thread.sleep(1000);  // 模拟耗时操作
                String result = "异步任务完成!";
                callback.onComplete(result);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

// 使用异步回调
AsyncWorker asyncWorker = new AsyncWorker();
asyncWorker.doAsyncWork(result -> System.out.println(result));

应用场景

  • 事件监听(如按钮点击事件)
  • 异步任务完成通知(如网络请求返回结果)
  • 自定义逻辑注入(如排序算法中的比较器)