亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java 實(shí)現(xiàn)回調(diào)代碼實(shí)例

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

JAVA實(shí)現(xiàn)回調(diào)

熟悉MS-Windows和X Windows事件驅(qū)動(dòng)設(shè)計(jì)模式的開(kāi)發(fā)人員,通常是把一個(gè)方法的指針傳遞給事件源,當(dāng)某一事件發(fā)生時(shí)來(lái)調(diào)用這個(gè)方法(也稱為“回調(diào)”)。Java的面向?qū)ο蟮哪P湍壳安恢С址椒ㄖ羔槪坪醪荒苁褂眠@種方便的機(jī)制。

Java支持interface,通過(guò)interface可以實(shí)現(xiàn)相同的回調(diào)。其訣竅就在于定義一個(gè)簡(jiǎn)單的interface,申明一個(gè)被希望回調(diào)的方法。

例如,假定當(dāng)某一事件發(fā)生時(shí)會(huì)得到通知,我們可以定義一個(gè)interface:

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

這樣我們就有了任何一個(gè)實(shí)現(xiàn)了這個(gè)接口類對(duì)象的手柄grip。

當(dāng)一事件發(fā)生時(shí),需要通知實(shí)現(xiàn)InterestingEvent 接口的對(duì)象,并調(diào)用interestingEvent() 方法。

class EventNotifier {
 private InterestingEvent ie;
 private boolean somethingHappened;

 public EventNotifier(InterestingEvent event) {
  ie = event;
  somethingHappened = false;
  }
public void doWork() {
        if (somethingHappened) {
            // 事件發(fā)生時(shí),通過(guò)調(diào)用接口的這個(gè)方法來(lái)通知
            ie.interestingEvent();
        }       
    }
}

在這個(gè)例子中,用somethingHappened 來(lái)標(biāo)志事件是否發(fā)生。

希望接收事件通知的類必須要實(shí)現(xiàn)InterestingEvent 接口,而且要把自己的引用傳遞給事件的通知者。

public class CallMe implements InterestingEvent {
 private EventNotifier en;

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

 // 實(shí)現(xiàn)事件發(fā)生時(shí),實(shí)際處理事件的方法
 public void interestingEvent() {
  // 這個(gè)事件發(fā)生了,進(jìn)行處理
 }
}

以上是通過(guò)一個(gè)非常簡(jiǎn)單的例子來(lái)說(shuō)明Java中的回調(diào)的實(shí)現(xiàn)。

當(dāng)然,也可以在事件管理或事件通知者類中,通過(guò)注冊(cè)的方式來(lái)注冊(cè)多個(gè)對(duì)此事件感興趣的對(duì)象。

1. 定義一個(gè)接口InterestingEvent ,回調(diào)方法nterestingEvent(String event) 簡(jiǎn)單接收一個(gè)String 參數(shù)。

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

2. 實(shí)現(xiàn)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. 測(cè)試

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();  
 }
}

以上就是對(duì)Java回調(diào)機(jī)制的介紹,有需要的同學(xué)可以參考下。

相關(guān)文章

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

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

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

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

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

    解決idea使用過(guò)程中讓你覺(jué)得不爽的一些問(wèn)題(小結(jié))

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

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

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

    springboot vue組件開(kāi)發(fā)實(shí)現(xiàn)接口斷言功能

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

    Java基礎(chǔ)學(xué)習(xí)之IO流應(yīng)用案例詳解

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

    java RMI詳細(xì)介紹及實(shí)例講解

    這篇文章主要介紹了java RMI詳細(xì)介紹及實(shí)例講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • JavaWeb中獲取表單數(shù)據(jù)及亂碼問(wèn)題的解決方法

    JavaWeb中獲取表單數(shù)據(jù)及亂碼問(wèn)題的解決方法

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

    Spring?Boot整合持久層之JdbcTemplate多數(shù)據(jù)源

    持久層是JavaEE中訪問(wèn)數(shù)據(jù)庫(kù)的核心操作,SpringBoot中對(duì)常見(jiàn)的持久層框架都提供了自動(dòng)化配置,例如JdbcTemplate、JPA 等,MyBatis 的自動(dòng)化配置則是MyBatis官方提供的。接下來(lái)分別向讀者介紹Spring Boot整合這持久層技術(shù)中的整合JdbcTemplate
    2022-08-08
  • 解決java junit單元測(cè)試@Test報(bào)錯(cuò)的問(wèn)題

    解決java junit單元測(cè)試@Test報(bào)錯(cuò)的問(wèn)題

    今天小編就為大家分享一篇解決java junit單元測(cè)試@Test報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論