回调函数
回调函数是一种编程机制,它允许你将一个函数作为参数传递给另一个函数,并在某些特定条件下或事件发生时调用这个函数。下面通过一个简单的Java例子来解释回调函数的工作原理。
例子:使用回调函数处理任务完成的通知
假设我们有一个模拟的任务执行器,它可以执行一些耗时的任务(比如下载文件、计算等)。我们希望在任务完成后能够通知某个对象,以便进行后续操作,比如更新UI显示任务完成的消息。
1. 定义回调接口
首先,我们需要定义一个回调接口TaskCallback
,它包含一个方法onTaskCompleted()
,将在任务完成时被调用。
public interface TaskCallback {
void onTaskCompleted(String result);
}
2. 实现任务类
接下来,实现一个Task
类,该类接受一个实现了TaskCallback
接口的对象作为参数。当任务完成时,它会调用这个回调对象的onTaskCompleted()
方法。
public class Task {
private TaskCallback callback;
public Task(TaskCallback callback) {
this.callback = callback;
}
public void execute() {
// 模拟一个耗时的任务
new Thread(() -> {
try {
Thread.sleep(2000); // 假设任务需要2秒完成
String result = "任务已完成";
if (callback != null) {
callback.onTaskCompleted(result);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
3. 使用回调
现在,我们可以创建一个实现了TaskCallback
接口的类,并在任务完成时接收通知。
public class Main implements TaskCallback {
public static void main(String[] args) {
Main app = new Main();
Task task = new Task(app);
task.execute();
}
@Override
public void onTaskCompleted(String result) {
System.out.println(result); // 输出: 任务已完成
}
}
在这个例子中,Main
类实现了TaskCallback
接口,并重写了onTaskCompleted()
方法。当我们创建Task
实例并传入Main
实例时,任务完成后会自动调用Main
中的onTaskCompleted()
方法,从而实现了回调机制。
总结
- 回调函数提供了一种机制,使得函数可以在特定事件发生时通知其他部分的代码。
- 在上面的例子中,
Task
类并不知道具体如何处理任务完成后的逻辑,只知道在任务完成时应该调用提供的回调接口的方法。 - 这种设计提高了代码的灵活性和模块性,使得不同功能的代码之间保持松散耦合。