欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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回調機制的介紹,有需要的同學可以參考下。

相關文章

  • java常用工具類 IP、File文件工具類

    java常用工具類 IP、File文件工具類

    這篇文章主要為大家詳細介紹了java常用工具類,包括IP、File文件工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • springboot如何使用@ConfigurationProperties封裝配置文件

    springboot如何使用@ConfigurationProperties封裝配置文件

    springboot如何使用@ConfigurationProperties封裝配置文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解決idea使用過程中讓你覺得不爽的一些問題(小結)

    解決idea使用過程中讓你覺得不爽的一些問題(小結)

    這篇文章主要介紹了解決idea使用過程中讓你覺得不爽的一些問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 一文帶你徹底明白什么是Java注解

    一文帶你徹底明白什么是Java注解

    Java注解可以說是我們編碼過程中最常用的,本文將給大家介紹Java注解的概念、作用以及如何使用注解來提升代碼的可讀性和靈活性,需要的可以參考一下
    2023-05-05
  • springboot vue組件開發(fā)實現接口斷言功能

    springboot vue組件開發(fā)實現接口斷言功能

    這篇文章主要為大家介紹了springboot+vue組件開發(fā)實現接口斷言功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java基礎學習之IO流應用案例詳解

    Java基礎學習之IO流應用案例詳解

    這篇文章主要為大家詳細介紹了Java?IO流的三個應用案例:點名器、集合到文件和文件到集合,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-09-09
  • java RMI詳細介紹及實例講解

    java RMI詳細介紹及實例講解

    這篇文章主要介紹了java RMI詳細介紹及實例講解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • JavaWeb中獲取表單數據及亂碼問題的解決方法

    JavaWeb中獲取表單數據及亂碼問題的解決方法

    這篇文章主要介紹了JavaWeb中獲取表單數據及亂碼問題的解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Spring?Boot整合持久層之JdbcTemplate多數據源

    Spring?Boot整合持久層之JdbcTemplate多數據源

    持久層是JavaEE中訪問數據庫的核心操作,SpringBoot中對常見的持久層框架都提供了自動化配置,例如JdbcTemplate、JPA 等,MyBatis 的自動化配置則是MyBatis官方提供的。接下來分別向讀者介紹Spring Boot整合這持久層技術中的整合JdbcTemplate
    2022-08-08
  • 解決java junit單元測試@Test報錯的問題

    解決java junit單元測試@Test報錯的問題

    今天小編就為大家分享一篇解決java junit單元測試@Test報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論