回调函数的定义
回调函数在百度百科中的定义为:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
解释:回调函数就是一个通过函数指针调用的函数 1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <iostream>
using namespace std;
int max(int a, int b) { return a > b ? a : b; }
int main() { int (*p)(int, int) = &max; cout << p(1, 2) << endl; return 0; }
|
解释:如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream>
using namespace std;
void fun2(void (*p)()) { p(); }
void fun1() { cout << "函数fun1被调用" << endl; }
int main() { void (*p)() = &fun1; fun2(p); return 0; }
|
Java回调函数
在Java中回调函数的意思就是:类A调用类B中的b方法,执行完b方法之后又反过来调用A中的a方法。
用一个通俗的例子解释就是:假设你公司的总经理给你布置了一个任务,只有你完成这个任务以后,总经理才能继续做他的工作。
这里的总经理就是类A,我就是类B,我要完成的任务就是方法b,而总经理的工作就是方法a。
代码
主类
1 2 3 4 5 6
| public class Main { public static void main(String[] args) { Personnel personnel = new Personnel(); new Manager(personnel, "整理文件"); } }
|
总经理类
1 2 3 4 5 6 7 8
| public class Manager { public Manager(Personnel personnel, String task) { personnel.doSomething(this, task); } public void doSomething() { System.out.println("总经理要做到事情。"); } }
|
员工类
1 2 3 4 5 6 7
| public class Personnel { public void doSomething(Manager manager, String task) { System.out.println("总经理安排了" + task + "的任务。"); System.out.println("完成任务中……\n任务完成!"); manager.doSomething(); } }
|
抽象为一个接口
现实工作中不止总经理给我们安排任务,还有副经理,主管等等,所以可以将回调方法抽象成一个接口。
主类
1 2 3 4 5 6 7 8 9
| package CallbackFunctionsDemo;
public class Main { public static void main(String[] args) { Personnel personnel = new Personnel(); new Manager(personnel, "整理文件"); new DeputyManager(personnel, "制作PPT"); } }
|
回调方法抽象成接口
1 2 3 4 5 6
| package CallbackFunctionsDemo;
public interface Superior { void doSomething(); String getPosition(); }
|
总经理类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package CallbackFunctionsDemo;
public class Manager implements Superior{
public Manager(Personnel personnel, String task) { personnel.doSomething(this, task); }
@Override public void doSomething() { System.out.println("总经理要做到事情。"); }
@Override public String getPosition() { return "总经理"; }
}
|
副经理类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| package CallbackFunctionsDemo;
public class DeputyManager implements Superior{
public DeputyManager(Personnel personnel, String task) { personnel.doSomething(this, task); }
@Override public void doSomething() { System.out.println("副经理要做到事情。"); }
@Override public String getPosition() { return "副经理"; } }
|
员工类
1 2 3 4 5 6 7 8 9 10 11
| package CallbackFunctionsDemo;
public class Personnel {
public void doSomething(Superior superior, String task) { System.out.println(superior.getPosition() + "安排了" + task + "的任务。"); System.out.println("完成任务中……\n任务完成!"); superior.doSomething(); }
}
|
运行结果
参考
https://blog.csdn.net/jiayi_yao/article/details/51046526