java 回调如何实现
回调机制的基本概念
回调是一种编程模式,允许在某个操作完成后通过函数通知调用方。Java 中通常通过接口或函数式接口实现回调,将函数作为参数传递并在特定事件触发时调用。

使用接口实现回调
定义一个回调接口,具体类实现该接口并重写回调方法。调用方持有接口引用,在适当时机触发回调。

// 1. 定义回调接口
interface Callback {
void onComplete(String result);
}
// 2. 实现回调接口
class Worker {
void doWork(Callback callback) {
// 模拟耗时操作
String result = "Task Done";
callback.onComplete(result); // 触发回调
}
}
// 3. 调用方使用回调
public class Main {
public static void main(String[] args) {
Worker worker = new Worker();
worker.doWork(new Callback() {
@Override
public void onComplete(String result) {
System.out.println("Callback received: " + result);
}
});
}
}
使用函数式接口(Java 8+)
通过 Consumer、Function 等函数式接口简化回调实现,结合 Lambda 表达式减少样板代码。
import java.util.function.Consumer;
class AsyncTask {
void execute(Consumer<String> callback) {
String data = "Processed Data";
callback.accept(data); // 触发回调
}
}
public class Main {
public static void main(String[] args) {
AsyncTask task = new AsyncTask();
task.execute(result -> System.out.println("Result: " + result));
}
}
异步回调示例
结合多线程实现异步回调,避免阻塞主线程。
class AsyncWorker {
void startWork(Callback callback) {
new Thread(() -> {
try {
Thread.sleep(1000); // 模拟耗时
callback.onComplete("Async Task Complete");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
public class Main {
public static void main(String[] args) {
AsyncWorker worker = new AsyncWorker();
worker.startWork(result -> System.out.println(result));
System.out.println("Main thread continues...");
}
}
实际应用场景
- 事件监听:GUI 开发中的按钮点击事件。
- 异步任务:网络请求完成后更新 UI。
- 插件扩展:框架通过回调允许用户自定义逻辑。
通过接口或 Lambda 表达式,Java 回调机制能灵活解耦调用方与被调用方,适用于多种异步和事件驱动场景。






