一、回调函数原理
在 Java 中,回调方法(Callback) 是一种允许代码在特定事件或条件满足时自动触发的机制 回调常用于异步编程、事件监听和自定义逻辑注入等场景。
回调的原理
- 接口定义:通过接口定义回调方法的签名(方法名、参数、返回值)。
- 实现接口:调用方实现接口中的方法,定义具体的回调逻辑。
- 传递引用:将实现了接口的对象传递给被调用方。
- 触发回调:被调用方在特定事件或条件满足时,调用接口方法。 也可以如下描述:
- Class A实现接口CallBack callback——背景1 (调用方)
- class A中包含一个class B的引用b ——背景2 (调用方)
- class B有一个参数为callback的方法f(CallBack callback) ——背景3
- A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
- 然后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);
}
});
}
}
异步回调示例
如果需要在异步任务中触发回调(例如多线程),可以结合 Runnable 或 ExecutorService:
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));
应用场景
- 事件监听(如按钮点击事件)
- 异步任务完成通知(如网络请求返回结果)
- 自定义逻辑注入(如排序算法中的比较器)