对使用回调函数目的理解
让一个已经写好的程序A调用我们自己写的程序B的某个方法。比如,A是一个封装好的加减法计算器程序,可以独立运行。B是我们创建的一个乘除法计算器。回调,就是想让A在可以完成加减法的同时,遇到乘除法可以直接调用B的方法。
相当于A在设计试就预留了可以灵活扩展和使用的功能接口。
回调的理解:
B必须先去调用A的某个方法,A这个方法重新返回来调用B中的方法。这就是回调。
为了实现回调过程,在Java中,必须通过接口。
让A类能够调用某个接口(实际被称为回调接口)中的抽象方法,且具有这个首先接口的引用。让B类实现这个接口的方法。(或者在调用A的方法参数中使用匿名内部类的方式。)
这样,在外部实现过程中,B类先自己调用A类中的某个方法function1,并将自己(回调接口的实现类)作为方法的参数传递给A。之后,A类的function1方法中,会调用这个回调接口中的抽像方法(也就是B类实现的方法),实现回调B类中的某个方法。
举例
假设我是程序员A,以下是我的程序a:
public class Caller{
private MyCallInterface mcl;//A类具有B类(抽象接口的引用)
public Caller(){}
public setCallfuc(MyCallInterface mc){
this.mc=mc;
}
//A类回调B类的方法
public call(){
my.fuc();
}
}
我还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。
/**
* 回调接口
*/
public interface MyCallInterface{
public void fuc();
}
于是,程序员B只需要实现这个接口就能达到回调的目的了:
public class B implements MyCallInterface{
public void fuc(){
//do something
}
public static void main(String args[]){
Caller call=new Caller();
call.setCallfuc(this);//B类将自己传递给A类
call.call();//在B类中调用了A类的某个方法
}
}