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