国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

用 Java 實現(xiàn)回調例程

2019-11-18 11:04:44
字體:
來源:轉載
供稿:網友

 


摘要
java 支持方法指針之前,Java 接口不能提供一種實現(xiàn)回調的好方法。假如您習慣于傳遞在事件驅動編程模型中調用的函數(shù)指針,則您會喜歡本技巧。
熟悉 MS-Windows 和 X Window System 事件驅動編程模型的開發(fā)人員,習慣于傳遞在某種事件發(fā)生時調用(即“回調”)的函數(shù)指針。Java 的面向對象模型目前并不支持方法指針,這樣似乎就不可能使用這種很好的機制。但我們并不是一點辦法都沒有!
Java 的接口支持提供了一種獲得回調的等價功能的機制。其技巧就是:定義一個簡單接口,并在該接口中聲明我們要調用的方法。

例如,假定我們希望在某個事件發(fā)生時得到通知。我們可以定義一個接口:

public interface InterestingEvent
{
   // 這僅是一個常規(guī)方法。因此假如需要,
   // 它可有返回值,也可接收參數(shù)。
   public void interestingEvent ();
}


這使得我們可以控制實現(xiàn)該接口的類的任何對象。因此,我們不必關心任何外部類型信息。與在將 C++ 代碼用于 Motif 時使用窗口小部件的數(shù)據域來容納對象指針的難以控制的 C 函數(shù)相比,這種方法要好得多。

發(fā)出事件信號的類必須等待實現(xiàn)了 InterestingEvent 接口的對象,并在適當時候調用 interestingEvent() 方法。

public class EventNotifier
{
   PRivate InterestingEvent ie;
   private boolean somethingHappened;

   public EventNotifier (InterestingEvent event)
{
// 保存事件對象以備后用。
ie = event;

// 還沒有要報告的事件。
somethingHappened = false;
}

   //...

   public void doWork ()
{
// 檢查在別處設置的謂詞。
if (somethingHappened)
    {
    // 通過調用接口的這個方法發(fā)出事件信號。
    ie.interestingEvent ();
    }
//...
}

   // ...
}


在上例中,我使用 somethingHappened 謂詞來跟蹤是否應觸發(fā)事件。在許多情況下,調用此方法足以保證向 interestingEvent() 發(fā)出信號。

希望接收事件通知的代碼必須實現(xiàn) InterestingEvent 接口,并將自身引用傳遞給事件通知程序。

public class CallMe implements InterestingEvent
{
   private EventNotifier en;

   public CallMe ()
{
// 創(chuàng)建事件通知程序,并將自身引用傳遞給它。
en = new EventNotifier (this);
}

   // 為事件定義實際的處理程序。
   public void interestingEvent ()
{
// 噢!必定發(fā)生了感愛好的事件!
// 執(zhí)行某些操作 ...
}

   //...
}

 



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清水河县| 大荔县| 湘潭县| 鹿泉市| 新建县| 余庆县| 玉龙| 阿拉善左旗| 赤城县| 广饶县| 邹平县| 五莲县| 京山县| 常山县| 巴彦淖尔市| 内乡县| 海安县| 丽江市| 博兴县| 织金县| 潜山县| 海南省| 普兰店市| 德昌县| 长海县| 新野县| 渑池县| 两当县| 定州市| 铜山县| 上饶县| 四会市| 隆回县| 舞钢市| 浦江县| 探索| 都匀市| 邳州市| 汕头市| 威宁| 贺兰县|