程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 完成回調代碼實例

java 完成回調代碼實例

編輯:關於JAVA

java 完成回調代碼實例。本站提示廣大學習愛好者:(java 完成回調代碼實例)文章只能為提供參考,不一定能成為您想要的結果。以下是java 完成回調代碼實例正文


JAVA完成回調

熟習MS-Windows和X Windows事宜驅動設計形式的開辟人員,平日是把一個辦法的指針傳遞給事宜源,當某一事宜產生時來挪用這個辦法(也稱為“回調”)。Java的面向對象的模子今朝不支撐辦法指針,仿佛不克不及應用這類便利的機制。

Java支撐interface,經由過程interface可以完成雷同的回調。其竅門就在於界說一個簡略的interface,聲名一個被願望回調的辦法。

例如,假定當某一事宜產生時會獲得告訴,我們可以界說一個interface:

public interface InterestingEvent {
 // 這只是一個通俗的辦法,可以吸收參數、也能夠前往值
 public void interestingEvent();
}

如許我們就有了任何一個完成了這個接口類對象的手柄grip。

當一事宜產生時,須要告訴完成InterestingEvent 接口的對象,並挪用interestingEvent() 辦法。

class EventNotifier {
 private InterestingEvent ie;
 private boolean somethingHappened;

 public EventNotifier(InterestingEvent event) {
  ie = event;
  somethingHappened = false;
  }
public void doWork() {
        if (somethingHappened) {
            // 事宜產生時,經由過程挪用接口的這個辦法來告訴
            ie.interestingEvent();
        }       
    }
}

在這個例子中,用somethingHappened 來標記事宜能否產生。

願望吸收事宜告訴的類必需要完成InterestingEvent 接口,並且要把本身的援用傳遞給事宜的告訴者。

public class CallMe implements InterestingEvent {
 private EventNotifier en;

 public CallMe() {
  // 新建一個事宜告訴者對象,並把本身傳遞給它
  en = new EventNotifier(this);
 }

 // 完成事宜產生時,現實處置事宜的辦法
 public void interestingEvent() {
  // 這個事宜產生了,停止處置
 }
}

以上是經由過程一個異常簡略的例子來講明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回調機制的引見,有須要的同窗可以參考下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved