参考:https://blog.youkuaiyun.com/xiaanming/article/details/8703708
回调:A类中调用B类的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。
代码实例:
interface CallBack {
public void solve(String result);
}
class Wang implements CallBack {
private Li li;
public Wang(Li li){
this.li = li;
}
public void askQuestion(final String question){
//这里用一个线程就是异步,
new Thread(new Runnable() {
@Override
public void run() {
li.executeMessage(Wang.this, question);
}
}).start();
//小网问完问题挂掉电话就去干其他的事情了,诳街去了
play();
}
public void play(){
System.out.println("我要逛街去了");
}
@Override
public void solve(String result) {
System.out.println("小李告诉小王的答案是--->" + result);
}
}
class Li {
public void executeMessage(CallBack callBack, String question){
System.out.println("小王问的问题--->" + question);
//模拟小李办自己的事情需要很长时间
for(int i=0; i<10000;i++){
}
String result = "答案是2";
callBack.solve(result);
}
}
class TestHuiDiao {
public static void main(String[]args){
Li li = new Li();
Wang wang = new Wang(li);
wang.askQuestion("1 + 1 = ?");
}
}
说明:
1)接口中的方法solve()方法就是回调方法。
2)自己的理解:
A类(Wang)实现了接口(CallBack,该接口有一个sovle()的方法),A类(Wang)持有B类(Li)的引用,在A类(Wang)中调用了B类(Li)中的某个方法C(executeMessage())同时在方法中将A的实例(Wang.this)传给方法B(Li),然后在B类(Li)中通过传入的A的实例(Wang.this)反过来调用A类(Wang)中的方法D(solve()),D(solve())这个方法就叫做回调方法。
3)直白理解:小王中有小李的实例作为属性,开启新的线程调用小李的方法C(并将小王的实例作为参数传入),在小李类中通过传入的小王的实例调用小王的方法,从而达到回调的作用。