對使用回調函數目的理解
讓一個已經寫好的程序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類的某個方法
}
}