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