對使用回調(diào)函數(shù)目的理解
讓一個已經(jīng)寫好的程序A調(diào)用我們自己寫的程序B的某個方法以清。比如泡躯,A是一個封裝好的加減法計算器程序贮竟,可以獨立運行丽焊。B是我們創(chuàng)建的一個乘除法計算器」颈穑回調(diào)技健,就是想讓A在可以完成加減法的同時,遇到乘除法可以直接調(diào)用B的方法惰拱。
相當于A在設計試就預留了可以靈活擴展和使用的功能接口雌贱。
回調(diào)的理解:
B必須先去調(diào)用A的某個方法,A這個方法重新返回來調(diào)用B中的方法弓颈。這就是回調(diào)帽芽。
為了實現(xiàn)回調(diào)過程,在Java中翔冀,必須通過接口导街。
讓A類能夠調(diào)用某個接口(實際被稱為回調(diào)接口)中的抽象方法,且具有這個首先接口的引用纤子。讓B類實現(xiàn)這個接口的方法搬瑰。(或者在調(diào)用A的方法參數(shù)中使用匿名內(nèi)部類的方式。)
這樣控硼,在外部實現(xiàn)過程中泽论,B類先自己調(diào)用A類中的某個方法function1,并將自己(回調(diào)接口的實現(xiàn)類)作為方法的參數(shù)傳遞給A卡乾。之后翼悴,A類的function1方法中,會調(diào)用這個回調(diào)接口中的抽像方法(也就是B類實現(xiàn)的方法)幔妨,實現(xiàn)回調(diào)B類中的某個方法鹦赎。
舉例
假設我是程序員A,以下是我的程序a:
public class Caller{
private MyCallInterface mcl;//A類具有B類(抽象接口的引用)
public Caller(){}
public setCallfuc(MyCallInterface mc){
this.mc=mc;
}
//A類回調(diào)B類的方法
public call(){
my.fuc();
}
}
我還需要定義一個接口误堡,以便程序員B根據(jù)我的定義編寫程序實現(xiàn)接口古话。
/**
* 回調(diào)接口
*/
public interface MyCallInterface{
public void fuc();
}
于是,程序員B只需要實現(xiàn)這個接口就能達到回調(diào)的目的了:
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類中調(diào)用了A類的某個方法
}
}