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

首頁 > 編程 > Java > 正文

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

2019-11-26 14:03:00
字體:
供稿:網(wǎng)友

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

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

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

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

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

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

當(dāng)一事件發(fā)生時,需要通知實現(xiàn)InterestingEvent 接口的對象,并調(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ā)生時,通過調(diào)用接口的這個方法來通知
            ie.interestingEvent();
        }       
    }
}

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

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

public class CallMe implements InterestingEvent { private EventNotifier en; public CallMe() {  // 新建一個事件通知者對象,并把自己傳遞給它  en = new EventNotifier(this); } // 實現(xiàn)事件發(fā)生時,實際處理事件的方法 public void interestingEvent() {  // 這個事件發(fā)生了,進行處理 }}

以上是通過一個非常簡單的例子來說明Java中的回調(diào)的實現(xiàn)。

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

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

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

2. 實現(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. 測試

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回調(diào)機制的介紹,有需要的同學(xué)可以參考下。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贡觉县| 荣昌县| 新闻| 禄丰县| 洛南县| 舞阳县| 富民县| 昌吉市| 南通市| 辽宁省| 大兴区| 楚雄市| 绥中县| 威远县| 龙山县| 黄陵县| 黔江区| 夹江县| 互助| 隆安县| 建平县| 通州市| 东明县| 沾益县| 安康市| 句容市| 白水县| 绥化市| 萝北县| 松桃| 甘孜县| 普安县| 德庆县| 临武县| 海兴县| 桃江县| 吴忠市| 西宁市| 平利县| 漯河市| 朔州市|