如何在java中创建自定义监听器?

时间:2011-08-04 12:23:18

标签: java interface listener observer-pattern

我想知道如何在java中设置我们自己的监听器。例如,我有一个函数,将数字从1增加到100.我想在值达到50时设置一个监听器。我怎么能这样做?请教我任何教程。

5 个答案:

答案 0 :(得分:24)

查看使用侦听器的任何类的源代码。事实上,这很容易:

  • 为您的听众创建一个界面,例如MyListener
  • 维护MyListener
  • 列表
  • 在侦听器应该侦听的每个事件上,遍历列表并使用某些事件参数调用适当的方法

至于观察者模式以及一些Java代码,请查看wikipedia

答案 1 :(得分:18)

https://stackoverflow.com/a/6270150/3675925

您可能想要查看observer pattern

以下是一些示例代码,可帮助您入门:

import java.util.*;

// An interface to be implemented by everyone interested in "Hello" events
interface HelloListener {
    void someoneSaidHello();
}

// Someone who says "Hello"
class Initiater {
    private List<HelloListener> listeners = new ArrayList<HelloListener>();

    public void addListener(HelloListener toAdd) {
        listeners.add(toAdd);
    }

    public void sayHello() {
        System.out.println("Hello!!");

        // Notify everybody that may be interested.
        for (HelloListener hl : listeners)
            hl.someoneSaidHello();
    }
}

// Someone interested in "Hello" events
class Responder implements HelloListener {
    @Override
    public void someoneSaidHello() {
        System.out.println("Hello there...");
    }
}

class Test {
    public static void main(String[] args) {
        Initiater initiater = new Initiater();
        Responder responder = new Responder();

        initiater.addListener(responder);

        initiater.sayHello();  // Prints "Hello!!!" and "Hello there..."
    }
}

答案 2 :(得分:0)

没有内置机制允许您将侦听器附加到所有变量。您要观看的对象需要自己提供支持。例如,它可能变为Observable并触发onChange事件给它的Observers(你还必须确保跟踪它)。

答案 3 :(得分:0)

我建议您使用EventBus作为用例。它有一个很好的API设计,易于使用。请查看他们的Getting Started部分,了解其工作原理。

答案 4 :(得分:0)

您可以使用 Signals 库。它看起来像这样:

interface FiftySignal{
    void on50();
}

class FiftyMaker{
    FiftySignal fiftySignal = Signals.signal(FiftySignal.class).dispatcher;

    void doIt(){
        for(int i = 0; i < 100; i++){
            if(i == 50){
                fiftySignal.on50(); // dispatching the event
            }
        }   
    }
}

class Boo{
    Signal<FiftySignal> fiftySignal = Signals.signal(FiftySignal.class);


    void bar(){
         fiftySignal.addListener(()-> System.out.println("It's 50!")); // listener
    }
}

免责声明:我是 Signals 的作者。