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

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

在Java中實現回調過程

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

  摘要:
  java接口提供了一個很好的方法來實現回調函數。假如你習慣于在事件驅動的編程模型中,通過傳遞函數指針來調用方法達到目的的話,那么你就會喜歡這個技巧。
  
  作者:John D. Mitchell
  
  在MS-Windows或者X-Window系統的事件驅動模型中,當某些事件發生的時候,開發人員已經熟悉通過傳遞函數指針來調用處理方法。而在Java的面向對象的模型中,不能支持這種方法,因而看起來似乎排除了使用這種比較舒適的機制,但事實并非如此。
  
  Java的接口提供了一種很好的機制來讓我們達到和回調相同的效果。這個訣竅就在于定一個簡單的接口,在接口之中定義一個我們希望調用的方法。
  
  舉個例子來說,假設當一個事件發生的時候,我們想它被通知,那么我們定義一個接口:
  public interface InterestingEvent
  {
    // This is just a regular method so it can return something or
    // take arguments if you like.
    public void interestingEvent ();
  }
  
  這就給我們一個控制實現了該接口的所有類的對象的控制點。因此,我們不需要關心任何和自己相關的其它外界的類型信息。這種方法比C函數更好,因為在C++風格的代碼中,需要指定一個數據域來保存對象指針,而Java中這種實現并不需要。
  
  發出事件的類需要對象實現InterestingEvent接口,然后調用接口中的interestingEvent ()方法。
  
  public class EventNotifier
  {
    PRivate InterestingEvent ie;
  private boolean somethingHappened;
    public EventNotifier (InterestingEvent event)
  {
  // Save the event object for later use.
  ie = event;
  // Nothing to report yet.
  somethingHappened = false;
  }
    //... 
    public void doWork ()
  {
  // Check the predicate, which is set elsewhere.
  if (somethingHappened)
    {
    // Signal the even by invoking the interface's method.
    ie.interestingEvent ();
    }
  //...
    }
    // ...
  }
  
  在這個例子中,我們使用了somethingHappened這個標志來跟蹤是否事件應該被激發。在許多事例中,被調用的方法能夠激發interestingEvent()方法才是正確的。
  希望收到事件通知的代碼必須實現InterestingEvent接口,并且正確的傳遞自身的引用到事件通知器。
  public class CallMe implements InterestingEvent
  {
  private EventNotifier en;
    public CallMe ()
  {
  // Create the event notifier and pass ourself to it.
  en = new EventNotifier (this);
  }
    // Define the actual handler for the event.
    public void interestingEvent ()
  {
  // Wow! Something really interesting must have occurred!
  // Do something...
  }
    //...
  }
  
  希望這點小技巧能給你帶來方便。
  
  關于作者:
  John D. Mitchell在過去的九年內一直做顧問,曾經在Geoworks使用OO匯編語言開發了PDA軟件,愛好于寫編譯器,Tcl/Tk和Java系統。和人合著了《Making Sense of Java》,目前從事Java編譯器的工作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新乡市| 小金县| 惠来县| 龙海市| 衡山县| 宜章县| 彭阳县| 武邑县| 江川县| 孟津县| 双牌县| 湛江市| 新郑市| 石狮市| 瓦房店市| 辽宁省| 伊通| 白水县| 宁德市| 屏东县| 望城县| 潞西市| 鄂托克前旗| 治县。| 资溪县| 渭南市| 隆德县| 抚州市| 神池县| 沁水县| 崇信县| 惠水县| 宜城市| 衡水市| 炉霍县| 佛山市| 司法| 佳木斯市| 广州市| 尉犁县| 开江县|