JAVA中的回調函數
在以前的JAVA學(xué)習過(guò)程當中,不太注意理論知識的學(xué)習,所以在閱讀thinking in java的時(shí)候,就沒(méi)有太注意其中關(guān)于回調函數的介紹。今天,在閱讀一段關(guān)于網(wǎng)絡(luò )信使的源代碼時(shí),發(fā)現了有關(guān)回調函數的使用,對他產(chǎn)生了研究的興趣,不過(guò)該源代碼中關(guān)于回調函數的介紹很模糊,在該程序當中所使用的回調函數意義不大(該源代碼很簡(jiǎn)單,而且不是很健壯)。
首先說(shuō)說(shuō)什么叫回調函數(網(wǎng)上查詢(xún)了一些資料,對它的解說(shuō)還是比較全面,但是很難理解,特別是在JAVA當中實(shí)現回調函數,不理解什么叫回調函數的,就更難實(shí)現了),以下介紹根據網(wǎng)上的資料整合而成。
在
WINDOWS中,程序員想讓系統DLL調用自己編寫(xiě)的一個(gè)方法,于是利用DLL當中回調函數(CALLBACK)的接口來(lái)編寫(xiě)程序,使它調用,這個(gè)就稱(chēng)為回調。在調用接口時(shí),需要嚴格的按照定義的參數和方法調用,并且需要處理函數的異步,否則會(huì )導致程序的崩潰。這樣的解釋似乎還是比較難懂,這里舉個(gè)簡(jiǎn)單的例子,程序員A寫(xiě)了一段程序(程序a),其中預留有回調函數接口,并封裝好了該程序。程序員B要讓a調用自己的程序b中的一個(gè)方法,于是,他通過(guò)a中的接口回調自己b中的方法。目的達到。在C/C++中,要用回調函數,被掉函數需要告訴調用者自己的指針地址,但在JAVA中沒(méi)有指針,怎么辦?我們可以通過(guò)接口(interface)來(lái)實(shí)現定義回調函數。
假設我是程序員A,以下是我的程序a:
public class Caller{
private MyCallInterface mcl;
public Caller(){}
public setCallfuc(MyCallInterface mc){
this.mc=mc;
}
public call(){
my.fuc();
}
}
我還需要定義一個(gè)接口,以便程序員B根據我的定義編寫(xiě)程序實(shí)現接口。
public interface MyCallInterface{
public void fuc();
}
于是,程序員B只需要實(shí)現這個(gè)接口就能達到回調的目的了:
public class B implements MyCallInterface{
public void fuc(){
//do something
}
public static void main(String args[]){
Caller call=new Caller();
call.setCallfuc(this);
}
}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。