【发布时间】:2011-10-19 22:59:05
【问题描述】:
我想知道如何在 java 中设置我们自己的侦听器。例如,我有一个将数字从 1 递增到 100 的函数。我想在值达到 50 时设置一个侦听器。我该怎么做?请建议我任何教程。
【问题讨论】:
标签: java interface listener observer-pattern
我想知道如何在 java 中设置我们自己的侦听器。例如,我有一个将数字从 1 递增到 100 的函数。我想在值达到 50 时设置一个侦听器。我该怎么做?请建议我任何教程。
【问题讨论】:
标签: java interface listener observer-pattern
查看任何使用监听器的类的源代码。其实很简单:
MyListener
MyListener的列表
关于观察者模式以及一些 Java 代码,请查看 wikipedia。
【讨论】:
没有允许您将侦听器附加到所有变量的内置机制。您要观看的对象需要自己提供支持。例如,它可以变为 Observable 并向其观察者触发 onChange 事件(您还必须确保正在跟踪)。
【讨论】:
我建议您将EventBus 用于您的用例。它有一个很好的 API 设计并且易于使用。看看他们的Getting Started 部分,看看它是如何工作的。
【讨论】:
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..."
}
}
【讨论】:
您可以为此使用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 的作者。
【讨论】: