- 什么是回调
回调其实是一种双向调用模式,也就是调用方在接口被调用时也会调用对方的接口。通俗的解释为:类A调用了类B中的方法1,然后类B最后又反过来调用类A中的方法2,即把结果返回给类A。
- 回调的具体实现(通过接口)
1、Class A实现接口CallBack callback——背景1
2、class A中包含一个class B的引用b ——背景2
3、class B有一个参数为callback的方法f(CallBack callback) ——背景3
4、A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
5、然后B就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D
这里通过一个经典的例子来说明回调的具体实现机制,在这个机制里,包含两个类和一个接口,接口的定义如下:
//相当于接口InA public interface BoomWTC{ //获得拉登的决定 public benLaDengDecide(); // 执行轰炸世贸 public void boom(); }
类A的定义如下,它作为一个主类,实现了接口
//相当于class A public class At$911 implements BoomWTC{ private boolean decide; private TerroristAttack ta; //类B public At$911(){ //构造函数 Date now=new Date(); SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm"); this.dicede= myFmt.format(dt).equals("01/09/11 09:44"); this.ta=new TerroristAttack(); } //获得拉登的决定 public boolean benLaDengDecide(){ return decide; } // 执行轰炸世贸 public void boom(){ ta.attack(new At$911);//class A调用class B的方法传入自己的对象,相当于【you call me】 } }
类B的定义如下:
public class TerroristAttack{ public TerroristAttack(){ } public attack(BoomWTC bmw){ //调用类A中的方法 if(bmw.benLaDengDecide()){ /*class B在方法中回调class A的方法,相当于【i call you back】*/ } } }
从例子可以看出,类B是通过接口回调了类A的方法