5 回答
TA貢獻1829條經驗 獲得超7個贊
回調就是一種利用函數指針進行函數調用的過程. 通過回調,對象能夠攜帶一些信息,這些信息允許它在稍后的某個時刻調用初始的對象?;卣{的價值在于它的靈活性,可以在運行時動態的決定需要調用什么方法。引用一段話:
使用回調函數實際上就是在調用某個函數(通常是API函數)時,將自己的一個函數(這個函數為回調函數)的地址作為參數傳遞給那個函數。而那個函數在需要的時候,利用傳遞的地址調用回調函數,這時你可以利用這個機會在回調函數中處理消息或完成一定的操作。
java的內部類實現了回調機制,在java的GUI中到處可以看到回調的例子。
詳細查看:java編程思想第10章,提到了閉包和回調。Java8引入Lambda表達式,也是使用匿名內部類實現類似回調的機制。
TA貢獻1946條經驗 獲得超3個贊
一個類調用另一個類中的方法,前者稱為調用者(caller),后者稱為被調用者(callee),調用者就是發號施令的人,被調用者就是按要求執行命令的人。
通常,調用者需要做一件事情時,就會獲取或創建一個被調用者的對象,然后調用它的方法,這是一種簡單明了的關系,我們很容易就理解了。
而回調是這樣一個過程:調用者那里事先有一些可能需要做的事情,被調用者把自己注冊到調用者那里,然后對他說:“有事叫我”,有點毛遂自薦的意思。然后當一件事情發生時,被調用者就會根據事先注冊的情況調用合適的方法來處理。
例如,我們向按鈕(調用者)注冊了一個點擊事件的處理程序(被調用者),當點擊事件發生時按鈕就會找到這些處理程序并調用它們。
回調特別適合于那種調用者事先不知道應該由哪些類來負責處理某件事的情況
例如,編寫按鈕類的人不知道別人應該怎么處理按鈕的點擊事件,但他又不能不給按鈕添加事件,否則按鈕就沒法正常使用了呀,這時候他就可以通過回調來解決這件事。
TA貢獻1854條經驗 獲得超8個贊
Java是面向對象的,不存在回調函數這個說法。
回調函數是腳本語言之類的叫法,作為參數傳遞,在某個事件發生時執行的函數叫做回調函數。
function doSomething(finishCallBack){
// 做事
// 做完,調事件完成的回調函數。
finishCallBack();
}
java能把方法作為參數傳遞嗎?不能, 但是java有很多類似的機制可以實現這種所謂的“回調”,比如匿名內部類:
public interface FinishHandler{
public void afterFinish();
}
public class SomeTask{
public void doSomething(FinishHandler handler){
// 做事
handler.afterFinish(); // "回調"
}
}
new SomeTask().doSomething(new FinishHandler(){
public void afterFinish(){
System.out.println("事情做完咯~~~")
}
});
添加回答
舉報
