最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 實現回調代碼實例

 更新時間:2016年07月20日 16:41:02   投稿:lqh  
本文主要介紹Java的回調機制,并附實例代碼以供大家參考學習,有需要的小伙伴可以看下

JAVA實現回調

熟悉MS-Windows和X Windows事件驅動設計模式的開發(fā)人員,通常是把一個方法的指針傳遞給事件源,當某一事件發(fā)生時來調用這個方法(也稱為“回調”)。Java的面向對象的模型目前不支持方法指針,似乎不能使用這種方便的機制。

Java支持interface,通過interface可以實現相同的回調。其訣竅就在于定義一個簡單的interface,申明一個被希望回調的方法。

例如,假定當某一事件發(fā)生時會得到通知,我們可以定義一個interface:

public interface InterestingEvent {
 // 這只是一個普通的方法,可以接收參數、也可以返回值
 public void interestingEvent();
}

這樣我們就有了任何一個實現了這個接口類對象的手柄grip。

當一事件發(fā)生時,需要通知實現InterestingEvent 接口的對象,并調用interestingEvent() 方法。

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 接口,而且要把自己的引用傳遞給事件的通知者。

public class CallMe implements InterestingEvent {
 private EventNotifier en;

 public CallMe() {
  // 新建一個事件通知者對象,并把自己傳遞給它
  en = new EventNotifier(this);
 }

 // 實現事件發(fā)生時,實際處理事件的方法
 public void interestingEvent() {
  // 這個事件發(fā)生了,進行處理
 }
}

以上是通過一個非常簡單的例子來說明Java中的回調的實現。

當然,也可以在事件管理或事件通知者類中,通過注冊的方式來注冊多個對此事件感興趣的對象。

1. 定義一個接口InterestingEvent ,回調方法nterestingEvent(String event) 簡單接收一個String 參數。

interface InterestingEvent {
 public void interestingEvent(String event);
}

2. 實現InterestingEvent接口,事件處理類

class CallMe implements InterestingEvent {
 private String name;
 public CallMe(String name){
  this.name = name;
 } 
 public void interestingEvent(String event) {
  System.out.println(name + ":[" +event + "] happened");
 }
}

3. 事件管理者,或事件通知者

class EventNotifier {
 private List<CallMe> callMes = new ArrayList<CallMe>();
 
 public void regist(CallMe callMe){
  callMes.add(callMe);
 }
 
 public void doWork(){
  for(CallMe callMe: callMes) {
   callMe.interestingEvent("sample event");
  }
 } 
}

4. 測試

public class CallMeTest {
 public static void main(String[] args) {
  EventNotifier ren = new EventNotifier();
  CallMe a = new CallMe("CallMe A");
  CallMe b = new CallMe("CallMe B");

  // regiest
  ren.regist(a);
  ren.regist(b);
  
  // test
  ren.doWork();  
 }
}

以上就是對Java回調機制的介紹,有需要的同學可以參考下。

相關文章

  • SpringSecurityOAuth2實現微信授權登錄

    SpringSecurityOAuth2實現微信授權登錄

    微信的登錄功能是用戶注冊和使用微信的必經之路之一,而微信授權登錄更是方便了用戶的登錄操作,本文主要介紹了SpringSecurityOAuth2實現微信授權登錄,感興趣的可以了解一下
    2023-09-09
  • 關于Java并發(fā)編程中線程間協(xié)作的兩種方式

    關于Java并發(fā)編程中線程間協(xié)作的兩種方式

    這篇文章主要介紹了關于Java并發(fā)編程中線程間協(xié)作的兩種方式,當隊列滿時,生產者需要等待隊列有空間才能繼續(xù)往里面放入商品,而在等待的期間內,生產者必須釋放對臨界資源的占用權,這是消費者模式,需要的朋友可以參考下
    2023-07-07
  • Java實現word文檔轉成圖片的示例詳解

    Java實現word文檔轉成圖片的示例詳解

    本文主要為大家詳細介紹了如何在Java項目中引用aspose-words和poi-tljar包實現word文檔轉成圖片,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-10-10
  • 在攔截器中讀取request參數,解決在controller中無法二次讀取的問題

    在攔截器中讀取request參數,解決在controller中無法二次讀取的問題

    這篇文章主要介紹了在攔截器中讀取request參數,解決在controller中無法二次讀取的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 淺談Java中復制數組的方式

    淺談Java中復制數組的方式

    這篇文章主要介紹了Java中復制數組的幾種方法,需要的朋友可以參考下。
    2017-08-08
  • 東八區(qū)springboot如何配置序列化

    東八區(qū)springboot如何配置序列化

    本文主要介紹了東八區(qū)springboot如何配置序列化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 帶你了解Java數據結構和算法之哈希表

    帶你了解Java數據結構和算法之哈希表

    這篇文章主要為大家介紹了Java數據結構和算法之哈希表,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Lombok的@CustomLog流暢的公司多場景日志

    Lombok的@CustomLog流暢的公司多場景日志

    這篇文章主要為大家介紹了Lombok的@CustomLog流暢的公司多場景日志開發(fā)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • springboot如何去除debug日志

    springboot如何去除debug日志

    這篇文章主要介紹了springboot如何去除debug日志的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實現簡單的學生教師管理系統(tǒng)

    Java實現簡單的學生教師管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現簡單的學生教師管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

博湖县| 利津县| 平陆县| 博乐市| 华宁县| 扶绥县| 罗平县| 夏邑县| 西和县| 宾阳县| 府谷县| 威宁| 吴桥县| 武鸣县| 疏勒县| 吉林市| 射阳县| 正蓝旗| 故城县| 陵水| 城市| 鹿泉市| 通海县| 兖州市| 宜阳县| 丰镇市| 汾阳市| 井研县| 莆田市| 甘肃省| 定南县| 灵石县| 开平市| 红原县| 北川| 永川市| 临邑县| 苗栗县| 北流市| 泾源县| 屏南县|