一般理解回调大致都是这样说,假设A和B两个人,A让B去做谋一件事情,B做完了,再来通知A。我们一步一步来,从最基本的开始实现。
1 class A {
2 public void letBdoSth(B b) {
3 System.out.println("让B做某些事情");
4 b.doSth(this);
5 }
6
7 public void getCompleted() {
8 System.out.println("得到B已经完成任务!");
9 }
10 }
11
12 class B {
13 public void doSth(A a) {
14 System.out.println("我是B,我正在处理A派给我的任务...");
15 a.getCompleted();//实现回调,getCompleted()方法即为回调方法
16 }
17 }上述代码理解,既然A让B去做某件事情,那么,A是肯定是要B的对象引用的,才能让B去做,b.doSth();然后既然B做完了,要通知A,那么B此时按理说应该也要有A的对象引用,所以通过b.doSth(this),把当前对象this传递给b。这样B处理完,就通过A的对象引用告诉A即a.getCompleted();此时这个方法其实就是回调方法。由a调用,那么应该由A来声明。
第二阶段:当前的b只能处理当前的a派给她的方法,这样b就失去了通用性,所以,b应该是可以处理所有类似a的派遣方法故用接口来实现如下:
public interface CallBack {
void getCompleted();
}
class A implements CallBack{
public void letBdoSth(B b) {
System.out.println("让B做某些事情");
b.doSth(this);
}
@Override
public void getCompleted() {
System.out.println("得到B已经完成任务!");
}
}
class B {
public void doSth(CallBack callBack) {
System.out.println("我是B,我正在处理A派给我的任务...");
callBack.getCompleted();
}
}上面的CallBack即为回调接口,b做任务的过程可以加入线程和延迟来模拟,下面是测试类:
class TestCallBack {
public static void main(String[] strings) {
new A().letBdoSth(new B());
}
}
//输出
//让B做某些事情
//我是B,我正在处理A派给我的任务...
//得到B已经完成任务!只是帮助下新人理解,我也是个新人菜鸟,若是有什么错误,还请见谅和提出。
















