我是来自javascript背景的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中的等效功能。有没有办法创建这种类型的自定义功能。
答案 0 :(得分: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 :(得分:1)
JavaScript是一种异步语言,Java是一种同步语言。您想要做的就像询问"如何将锤子变成螺丝刀一样?"尽管创造性的完全可能使锤子拧入某些东西,但并不是如何使用该工具,结果可能会有所不同。
回调在JavaScript中是必不可少的,让程序知道函数已经完成,Java知道函数已经完成,因为它停止执行它。
Java为您提供事件监听器,用于在您不了解时可能看起来相似的事件;他们闲着,直到他们正在听的任何东西激活他们,然后它激活,执行并回到听力。
Java的做法是告诉听众做任何你想做的事情;你不会停下来等待回调,因为Java会停止,执行你告诉它的内容,然后回到它来自的地方。如何为侦听器编写代码in the oracle tutorial,但您的问题更多的是逻辑问题而不是特定代码。
如果你想让监听器为另一个方法存储一些东西,那么带有getter和setter的bean将是一种Java方式。