本文目錄一覽:
java中怎樣定義回調函數
程序員A寫了一段程序(程序a),其中預留有回調函數介面,並封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,於是,他通過a中的介面回調自己b中的方法。目的達到。在C/C++中,要用回調函數,被掉函數需要告訴調用者自己的指針地址,但在JAVA中沒有指針,怎麼辦?我們可以通過介面(interface)來實現定義回調函數。
假設我是程序員A,以下是我的程序a:
[java] view plaincopyprint?
public class Caller
{
public MyCallInterface mc;
public void setCallfuc(MyCallInterface mc)
{
this.mc= mc;
}
public void call(){
this.mc.method();
}
}
還需要定義一個介面,以便程序員B根據我的定義編寫程序實現介面。
public interface MyCallInterface
{
public void method();
}
於是,程序員B只需要實現這個介面就能達到回調的目的了:
public class B implements MyCallInterface
{
public void method()
{
System.out.println(“回調”);
}
public static void main(String args[])
{
Caller call = new Caller();
call.setCallfuc(new B());
call.call();
}
}
JAVA裡面方法回調是什麼意思
所謂回調,就是客戶程序C調用服務程序S中的某個函數A,然後S又在某個時候反過來調用C中的某個函數B,對於C來說,這個B便叫做回調函數。例如Win32下的窗口過程函數就是一個典型的回調函數。一般說來,C不會自己調用B,C提供B的目的就是讓S來調用它,而且是C不得不提供。由於S並不知道C提供的B姓甚名誰,所以S會約定B的介面規範(函數原型),然後由C提前通過S的一個函數R告訴S自己將要使用B函數,這個過程稱為回調函數的註冊,R稱為註冊函數。Web Service以及Java的RMI都用到回調機制,可以訪問遠程伺服器程序。
下面舉個通俗的例子:
某天,我打電話向你請教問題,當然是個難題,^_^,你一時想不出解決方法,我又不能拿著電話在那裡傻等,於是我們約定:等你想出辦法後打手機通知我,這樣,我就掛掉電話辦其它事情去了。過了XX分鐘,我的手機響了,你興高采烈的說問題已經搞定,應該如此這般處理。故事到此結束。這個例子說明了「非同步+回調」的編程模式。其中,你後來打手機告訴我結果便是一個「回調」過程;我的手機號碼必須在以前告訴你,這便是註冊回調函數;我的手機號碼應該有效並且手機能夠接收到你的呼叫,這是回調函數必須符合介面規範。
通過上面個人感覺到回調更多的應用就是結合非同步。比如:Ajax中js通過組件和伺服器的非同步通信。
Java 什麼是回調
所謂回調,就是客戶程序Client調用服務程序Service中的某個方法A,然後Service又在某個時候反過來調用Client中的某個方法B,對於Client來說,這個B便叫做回調函數
回調實現的步驟
1、定義回調介面和回調方法
2、Client實現回調介面和回調方法,並在Client中包含Service引用,通過引用調用Servie中的方法並且必須傳入一個當前對象Client(因為當前對象實現了CallBack介面所以也屬於介面對象)
3、在Service中定義一個介面對象並在方法中對初始化(將Client傳過來的當前對象賦值給介面對象),通過介面對象調用介面中方法(調用的Client實現的介面方法)
4、測試
在java中回調函數怎麼理解,android中的回調函數和java中有區別嗎?
可以理解為一種邏輯的延伸。例如在java中已onXXX開頭的方法。
這些方法通常是一種信息的延伸。預示著某些事件發生了。這些信息通常是某些大邏輯的一部分。而其他部分不需要開發者考慮。
比如onCreate方法,了解了生命周期就會知道他是整個activity第一個執行的代碼。那麼他究竟是誰調用的。這個一般不需要考慮。只需要了解系統在調用即可。 而這個方法在執行的時候。需要你去補充這個方法的實現。 所以相當於你完成了事件的餘下部分。
比如早晨需要在鬧鈴響之後起床。那麼你可以設置一個timer來記時或者是一個線程來跑。當發現到的時候。需要把這個事件拋出去。至於誰來處理。這不是鬧鈴考慮的範圍。他的作用就是觸發事件.至於處理。那麼需要處理這個事件的。可以用很多方法來建立關聯的句柄。
比如。通過介面的實現。繼承。或者像android里的廣播。
回調函數描述的是一種模式。這個和語言或平台無關。所以android中和java中是一樣的。C++中也有。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151309.html