|
JAVA中的回調(diào)函數(shù) 在以前的JAVA學習過程當中,不太注意理論知識的學習,所以在閱讀thinking in java的時候,就沒有太注意其中關于回調(diào)函數(shù)的介紹。今天,在閱讀一段關于網(wǎng)絡信使的源代碼時,發(fā)現(xiàn)了有關回調(diào)函數(shù)的使用,對他產(chǎn)生了研究的興趣,不過該源代碼中關于回調(diào)函數(shù)的介紹很模糊,在該程序當中所使用的回調(diào)函數(shù)意義不大(該源代碼很簡單,而且不是很健壯)。 首先說說什么叫回調(diào)函數(shù)(網(wǎng)上查詢了一些資料,對它的解說還是比較全面,但是很難理解,特別是在JAVA當中實現(xiàn)回調(diào)函數(shù),不理解什么叫回調(diào)函數(shù)的,就更難實現(xiàn)了),以下介紹根據(jù)網(wǎng)上的資料整合而成。 在WINDOWS中,程序員想讓系統(tǒng)DLL調(diào)用自己編寫的一個方法,于是利用DLL當中回調(diào)函數(shù)(CALLBACK)的接口來編寫程序,使它調(diào)用,這個就稱為回調(diào)。在調(diào)用接口時,需要嚴格的按照定義的參數(shù)和方法調(diào)用,并且需要處理函數(shù)的異步,否則會導致程序的崩潰。這樣的解釋似乎還是比較難懂,這里舉個簡單的例子,程序員A寫了一段程序(程序a),其中預留有回調(diào)函數(shù)接口,并封裝好了該程序。程序員B要讓a調(diào)用自己的程序b中的一個方法,于是,他通過a中的接口回調(diào)自己b中的方法。目的達到。在C/C++中,要用回調(diào)函數(shù),被掉函數(shù)需要告訴調(diào)用者自己的指針地址,但在JAVA中沒有指針,怎么辦?我們可以通過接口(interface)來實現(xiàn)定義回調(diào)函數(shù)。 假設我是程序員A,以下是我的程序a: public class Caller{ private MyCallInterface mcl; public Caller(){} public setCallfuc(MyCallInterface mc){ this.mc=mc; } public call(){ my.fuc(); } } 我還需要定義一個接口,以便程序員B根據(jù)我的定義編寫程序?qū)崿F(xiàn)接口。 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); } } |
|
|
來自: liang1234_ > 《回調(diào)函數(shù)》