一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java 實現回調代碼實例

java 實現回調代碼實例

2020-05-29 14:39java教程網 JAVA教程

本文主要介紹Java的回調機制,并附實例代碼以供大家參考學習,有需要的小伙伴可以看下

JAVA實現回調

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

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

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

java" id="highlighter_473368">
?
1
2
3
4
public interface InterestingEvent {
 // 這只是一個普通的方法,可以接收參數、也可以返回值
 public void interestingEvent();
}

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

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

?
1
2
3
4
5
6
7
8
9
class EventNotifier {
 private InterestingEvent ie;
 private boolean somethingHappened;
 
 public EventNotifier(InterestingEvent event) {
  ie = event;
  somethingHappened = false;
  }
public void doWork() {<br>        if (somethingHappened) {<br>            // 事件發生時,通過調用接口的這個方法來通知<br>            ie.interestingEvent();<br>        }        <br>    }<br>}

在這個例子中,用somethingHappened 來標志事件是否發生。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class CallMe implements InterestingEvent {
 private EventNotifier en;
 
 public CallMe() {
  // 新建一個事件通知者對象,并把自己傳遞給它
  en = new EventNotifier(this);
 }
 
 // 實現事件發生時,實際處理事件的方法
 public void interestingEvent() {
  // 這個事件發生了,進行處理
 }
}

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

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

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

?
1
2
3
interface InterestingEvent {
 public void interestingEvent(String event);
}

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

?
1
2
3
4
5
6
7
8
9
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. 事件管理者,或事件通知者

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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. 測試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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教程談談Java中Volatile關鍵字的理解

    談談Java中Volatile關鍵字的理解

    volatile這個關鍵字可能很多朋友都聽說過,或許也都用過。在Java 5之前,它是一個備受爭議的關鍵字,因為在程序中使用它往往會導致出人意料的結果,本...

    小眼兒3612020-04-14
  • JAVA教程eclipse怎么引入spring boot項目插件的方法

    eclipse怎么引入spring boot項目插件的方法

    這篇文章主要介紹了eclipse怎么引入spring boot項目插件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    莫采4272019-07-08
  • JAVA教程MyBatis批量插入(insert)數據操作

    MyBatis批量插入(insert)數據操作

    本文給大家分享MyBatis批量插入(insert)數據操作知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧 ...

    chenzhou1235202482020-05-20
  • JAVA教程Spring Cloud Alibaba Nacos 入門詳解

    Spring Cloud Alibaba Nacos 入門詳解

    這篇文章主要介紹了Spring Cloud Alibaba Nacos入門詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    幻楚4502019-06-22
  • JAVA教程java servlet結合Oracle搭建java的web開發環境

    java servlet結合Oracle搭建java的web開發環境

    今天我將與大家分享一下我學JAVA WEB寫的一些小實例 ,我個人是不太喜歡書本上的晦澀的概念的,所以我花了更多的時間在一些應用實例上,我覺得這樣的...

    hebedich2262020-03-13
  • JAVA教程Struts2在打包json格式的懶加載異常問題

    Struts2在打包json格式的懶加載異常問題

    這篇文章主要為大家詳細介紹了Struts2在打包json格式的懶加載異常問題,感興趣的小伙伴們可以參考一下 ...

    eson_151202020-05-13
  • JAVA教程JVM Tomcat性能實戰(推薦)

    JVM Tomcat性能實戰(推薦)

    下面小編就為大家帶來一篇JVM Tomcat性能實戰(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian5032020-05-01
  • JAVA教程Java使用Deque實現堆棧的方法

    Java使用Deque實現堆棧的方法

    這篇文章主要介紹了Java使用Deque實現堆棧的方法,實例分析了java簡單實現堆棧的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下 ...

    鑒客2222019-12-27
主站蜘蛛池模板: 蝴蝶传媒免费安装 | 精品人伦一区二区三区潘金莲 | 亚洲成人精品久久 | 色综合久久日韩国产 | 欧美2区| 激情六月丁香婷婷四房播 | 91视频免费网站 | 久青草国产97香蕉在线视频 | 亚洲热影院 | 日韩大片在线播放 | 91视频国产自拍 | 调教女高中生第3部分 | 国产第9页 | 高跟翘臀老师后进式视频 | eeuss免费快捷 | 欧美亚洲另类在线观看 | 亚洲精品久久麻豆蜜桃 | 女子监狱第二季未删减在线看 | 国产一级片免费视频 | 日本国产最新一区二区三区 | 美女扒开胸罩露出奶了无遮挡免费 | 欧美a级v片不卡在线观看 | 超级乱淫伦小说1女多男 | 亚州性夜夜射在线观看 | 丝瓜视频黄色在线观看 | 男人扒开女人下身添 | 武侠艳妇屈辱的张开双腿 | 精品欧美一区二区精品久久 | 大胆暴露亚洲美女xxxx | 亚洲欧洲日产国码无码av | 第一次出血videos | 女人被男人躁得好爽免费视频 | 男人视频网 | chinese一tk视频丨vk | 1769在线观看 | 国产在线步兵一区二区三区 | 成人伊在线影院 | 日本高清视频在线的 | 91精品国产综合久久福利 | 娇妻在床上迎合男人 | 韩国丽卡三级作品 |