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回調機制的引見,有須要的同窗可以參考下。