2015-06-29 52 views
4

我是來自JavaScript背景的Java新手。在Java中綁定事件/回調到關鍵字

在JavaScript中,我們可以在對象保存回調像這 -

//we register some callback on a keyword 
    var observerCallbacks = {}; 
    registerObserverCallback = function(eventname ,callback){ 
       observerCallbacks[eventname] = callback; 
      }; 
//For calling events 
    notifyObservers = function(eventname){   
     observerCallbacks[eventname]();        
      }; 

用法:

//Register event 
     registerObserverCallback('eventA',function(){ 
      //body of callback 
    }); 

//For calling event 
notifyObservers('eventA'); 

我要尋找一個在相當於Java功能。有沒有辦法創建這種類型的自定義功能。

回答

3

Java爲此具有略微不同的機制。對象將自身註冊爲特定類型事件的偵聽器發生此類事件時,將通知所有偵聽器。

Here你可以找到一個關於它的教程。下面的代碼是從那裏。

public class MultiListener ... implements ActionListener { 
    ... 
    //where initialization occurs: 
     button1.addActionListener(this); 
     button2.addActionListener(this); 

     button2.addActionListener(new Eavesdropper(bottomTextArea)); 
    } 

    public void actionPerformed(ActionEvent e) { 
     topTextArea.append(e.getActionCommand() + newline); 
    } 
} 

class Eavesdropper implements ActionListener { 
    ... 
    public void actionPerformed(ActionEvent e) { 
     myTextArea.append(e.getActionCommand() + newline); 
    } 
} 

更多關於這個話題可以發現here

1

JavaScript是一種異步的語言,Java是一個同步的語言。你想要做什麼就像問「如何把我的錘子變成螺絲刀?」一樣。雖然創造力仍然完全有可能使錘頭具有某種功能,但並非如何使用該工具,結果可能會有所不同。

爲了讓程序知道函數已經完成,JavaScript中的回調函數是必不可少的,Java知道函數完成後就停止執行了。

Java爲您提供了事件監聽器,當您不知道更好時,事件可能看起來類似;他們閒置,直到他們正在收聽的任何東西激活他們,然後激活,執行並返回到收聽狀態。

這樣做的Java方法是告訴你的聽衆做任何你想讓它做的事情;你不會停下來等待回調,因爲Java會停止,執行你告訴的內容,然後回到它來自的地方。如何爲偵聽器編寫代碼可以找到in the oracle tutorial,但是您的問題更多的是邏輯問題而不是特定的代碼。

如果您希望偵聽器爲另一種方法存儲某些內容,則具有getter和setter的bean將是一種Java方式。