将事件/回调绑定到Java中的关键字

时间:2015-06-29 13:00:14

标签: java events event-handling

我是来自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中的等效功能。有没有办法创建这种类型的自定义功能。

2 个答案:

答案 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方式。