Java 回呼函數

來源:互聯網
上載者:User

 

在C或者C++中回呼函數的定義:

程式在調用一個函數時,將自己的函數的地址作為參數傳遞給程式調用的函數時(那麼這個自己的函數稱回呼函數)

Java中沒有指標,不能傳遞方法的地址,一般採用介面回調實現:把實現某一介面的類建立的對象的引用賦給該介面聲明的介面變數,那麼該介面變數就可以調用被類實現的介面的方法。

實現回調的原理簡介如下:

首先建立一個回調對象,然後再建立一個控制器對象,將回調對象需要被調用的方法告訴控制器對象。控制器對象負責檢查某個情境是否出現或某個條件是否滿足。當此情境出現或此條件滿足時,自動調用回調對象的方法。

可以舉個現實生活中的例子:

一讀者想借《軟體技術學習與實踐》這本書,但這本書已被其他讀者借走了。於是,讀者與圖書館管理員間發生了以下對話:

讀者:“我把我的電話號碼告訴你,等書一到就馬上通知我。”

管理員:“好的。另一讀者把書還回來後,馬上給您打電話,書我先幫您留著。”

在上述這個情境中,讀者就是“回調對象”,管理員就是“控制器對象”,讀者的電話號碼就是“回調對象的方法”。

詳細的執行個體如下:

1、建立一個回調介面:

1 //回調介面
2  public interface ICallBack
3 { 
4 void run();
5 }

複製代碼

2、建立回調介面的實作類別:

1 class CallBackClass implements ICallBack
2 {public void run()
3 { 
4  //輸出目前時間
5   System.out.println(System.currentTimeMillis() );
6 }
7 }

複製代碼

3、建立控制類

1 class Controller
2 {
3 public ICallBack CallBackObject = null;// 引用回調對象
4 Scanner input = new Scanner(System.in); //讀取命令列輸入
5 public Controller(ICallBack obj)
6 {
7 this.CallBackObject = obj;
8 }
9 public void Begin()
10 {
11 while(input.next() != null)//判斷是否有輸入
12 {
13 CallBackObject.run();
14 }
15 }
16 }

複製代碼

運行程式:

1 class Program
2 {
3 static void Main(string[] args)
4 {
5 //建立控制器對象,將提供給它的回調對象傳入
6 Controller obj = new Controller(new CallBackClass());
7 //啟動控制器對象運行
8 obj.Begin();
9 }
10 }

複製代碼

在控制器類中引用了回調對象,因此就能調用回調方法,當控制器進行某些判斷之後(如:監聽按一下滑鼠操作)就會自動調用回調方法!簡易流程圖如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.