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

首頁 > 學院 > 開發設計 > 正文

Java技巧:用Java實現回調例程

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

  熟悉 MS-Windows 和 X Window System 事件驅動編程模型的開發人員,習慣于傳遞在某種事件發生時調用(即“回調”)的函數指針。java 的面向對象模型目前并不支持方法指針,這樣似乎就不可能使用這種很好的機制。但我們并不是一點辦法都沒有!
  Java 的接口支持提供了一種獲得回調的等價功能的機制。其技巧就是:定義一個簡單接口,并在該接口中聲明我們要調用的方法。
  
  例如,假定我們希望在某個事件發生時得到通知。我們可以定義一個接口:
  
  public interface InterestingEvent
  {
  // 這僅是一個常規方法。因此假如需要,
  // 它可有返回值,也可接收參數。
  public void interestingEvent ();
  }
  
  這使得我們可以控制實現該接口的類的任何對象。因此,我們不必關心任何外部類型信息。與在將 C++ 代碼用于 Motif 時使用窗口小部件的數據域來容納對象指針的難以控制的 C 函數相比,這種方法要好得多。
  
  發出事件信號的類必須等待實現了 InterestingEvent 接口的對象,并在適當時候調用 interestingEvent() 方法。
  
  public class EventNotifier
  {
  PRivate InterestingEvent ie;
  private boolean somethingHappened;
  
  public EventNotifier (InterestingEvent event)
  {
  // 保存事件對象以備后用。
  ie = event;
  
  // 還沒有要報告的事件。
  somethingHappened = false;
  }
  
  //...
  
  public void doWork ()
  {
  // 檢查在別處設置的謂詞。
  if (somethingHappened)
  {
  // 通過調用接口的這個方法發出事件信號。
  ie.interestingEvent ();
  }
  //...
  }
  
  // ...
  }
  
  在上例中,我使用 somethingHappened 謂詞來跟蹤是否應觸發事件。在許多情況下,調用此方法足以保證向 interestingEvent() 發出信號。
  
  希望接收事件通知的代碼必須實現 InterestingEvent 接口,并將自身引用傳遞給事件通知程序。
  
  public class CallMe implements InterestingEvent
  {
  private EventNotifier en;
  
  public CallMe ()
  {
  // 創建事件通知程序,并將自身引用傳遞給它。
  en = new EventNotifier (this);
  }
  
  // 為事件定義實際的處理程序。
  public void interestingEvent ()
  {
  // 噢!必定發生了感愛好的事件!
  // 執行某些操作 ...
  }
  
  //...
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荥经县| 青州市| 静海县| 彝良县| 横山县| 中西区| 汝阳县| 黔南| 盐亭县| 镇巴县| 衡南县| 高要市| 宁国市| 昌图县| 沙田区| 余姚市| 宣城市| 科尔| 开封市| 策勒县| 寿宁县| 罗平县| 津南区| 襄垣县| 甘孜| 镇沅| 石家庄市| 九龙县| 工布江达县| 平谷区| 栾城县| 铜陵市| 肃宁县| 会宁县| 富源县| 福州市| 高碑店市| 吉水县| 泽州县| 安塞县| 中西区|