我想了解如何在Java中设置自己的监听器。例如,我有一个将数字从1增加到100的函数。当该值达到50时,我想设置一个监听器。我该如何做?请给我推荐任何教程。
我想了解如何在Java中设置自己的监听器。例如,我有一个将数字从1增加到100的函数。当该值达到50时,我想设置一个监听器。我该如何做?请给我推荐任何教程。
https://dev59.com/UW025IYBdhLWcg3wAg_p#6270150
你可能想要了解观察者模式。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..."
}
}
import java.util.EventObject;
// Step 1: Create a class to represent the event
class MyEvent extends EventObject {
public MyEvent(Object source) {
super(source);
}
}
// Step 2: Add code to fire the event
class EventSource {
private List listeners = new ArrayList();
public void addListener(MyEventListener listener) {
listeners.add(listener);
}
public void removeListener(MyEventListener listener) {
listeners.remove(listener);
}
public void fireEvent() {
MyEvent event = new MyEvent(this);
for (MyEventListener listener : listeners) {
listener.handleMyEvent(event);
}
}
}
// Step 3: Add listeners to respond to the event
interface MyEventListener extends EventListener {
void handleMyEvent(MyEvent event);
}
class EventListenerImpl implements MyEventListener {
public void handleMyEvent(MyEvent event) {
System.out.println("Event occurred: " + event.getSource());
}
}
public class Main {
public static void main(String[] args) {
EventSource source = new EventSource();
source.addListener(new EventListenerImpl());
source.fireEvent();
}
}
- Eren查看任何使用监听器的类的源代码都很容易:
MyListener
MyListener
列表至于观察者模式和一些Java代码,请参阅维基百科。
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的作者。
没有内置机制可以让你附加监听器到所有变量。你想要监视的对象需要自己提供支持。例如,它可以成为可观察对象,并向其观察者触发onChange事件(你也必须确保正在跟踪这些观察者)。
我建议您在这种情况下使用EventBus。它具有良好的API设计,易于使用。请查看他们的Getting Started部分以了解其工作原理。