回调的基本理解
一般理解回调大致都是这样说,假设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已经完成任务!
只是帮助下新人理解,我也是个新人菜鸟,若是有什么错误,还请见谅和提出。