要理解回调,首先要明白的是:**回调的A,B两方是针对模块而言的,并不是指java中A类,B类。比如系统的库或框架的API代表A模块的话,我们自己写的应用程序就是代表B模块。**
如果不明白的话,我们就举个例子:比如小明是个框架程序员,框架里有一个接口:
/**
* @desc: 小明编写的底层回调接口
* @author xiaoming
*/
public interface CallBack {
public void excute();
}
然后里面还有一个类:
/**
* @desc: 小明作为API底层身份出现,是不知道应用层有小城这号人物的
* @author: xiaoming
*/
public class XiaoMing {
private CallBack callBack;
//注册
public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
public CallBack getCallBack() {
return callBack;
}
public void doSome(){
//回调了callBack对象的excute方法
callBack.excute();
};
}
以上是系统的库或框架的API模块也就是A模块介绍完了。然后应用程序员小城准备使用小明的框架,于是他先写了一个类:
/**
* @desc: 小城是上层(应用层)的,为了被底层(API)调用,必须实现底层的接口
* @author: xiaocheng
*/
public class XiaoCheng implements CallBack{
@Override
public void excute() {
System.out.println("小城实现了小明的接口,这是小城的方法~~~~");
}
}
然后小城又写了一个测试类进行回调测试:
/**
* @desc: 测试回调
* @author xiaocheng
*/
public class ClientTest {
public static void main(String[] args) {
//小城调用小明写的API,相当于上层应用层模块调用了底层API模块
XiaoMing xiaoMing = new XiaoMing();
XiaoCheng xiaoCheng = new XiaoCheng();
xiaoMing.setCallBack(xiaoCheng);//将小城注册给小明
//小明在这个底层API的方法中,又回调了应用层传递过来的xiaoCheng对
//象的excute方法,这个excute方法就是回调方法
xiaoMing.doSome();
}
}
以上就是我参考了网上很多关于回调函数理解后得出的理解,相对来说应该更能让人明白回调的理解吧。