什么是 java.util.EventListener?

What is a java.util.EventListener?

我找不到这个问题的答案。 什么是 java.util.EventListener?它是如何工作的? 我已经对 google 做了一些研究,但我只发现了这个,这不是很清楚:所有事件侦听器接口都必须扩展的标记接口。

有人可以帮忙吗?

侦听器是 class 包含在特定操作发生时调用的方法。

java.util.EventListener是一个标记接口(没有任何方法的接口),所有的监听器都应该实现。

事实上,它甚至没有添加任何功能,但它可能对某些 IDE 和代码分析工具有帮助。

因此,如果您想创建自己的自定义事件(由您触发),您需要在事件发生时以某种方式调用所有侦听器方法。

例如,您可以这样做:

首先,您为您的侦听器创建一个扩展 EventListener:

的接口
public interface MyListener extends EventListener{
    void onEvent();
}

然后,您需要创建一种机制来注册和调用所有事件:

private Collection<MyListener> listeners=new HashSet<>();
public void register(MyListener listener){
    listeners.add(listener);
}
public void eventHappens(){
    for(MyListener listener:listeners){
        listener.onEvent();
    }
}

然后,您可以使用

创建一个监听器
public class MyListenerImpl implements MyListener{
    private String msg;
    public MyListenerImpl(String data){
        this.data=data;
    }
    @Override
    public void onEvent(){
        System.out.println(msg);
    }
}

您可以使用

注册它
register(new MyListenerImpl("Event occurs"));

每当 eventHappens() 被调用时(如果您收到网络数据包,您可以调用它),您所有注册的侦听器都将被执行。

例如:

register(new MyListenerImpl("listener 1 called"));
register(new MyListenerImpl("listener 2 called"));
System.out.println("calling event");
eventHappens();

会打印

calling event

listener 1 called

listener 2 called

第一个 Google 命中是 the EventListener documentation,您似乎已经发现了。

看到页面顶部的蓝色导航栏了吗?第四个字是一个“用”link。去那个。

EventListener 提供了类型安全的多态性。例如,java.awt.Component 有一个 getListeners method 需要 EventListener 的子类。

EventListener 实际上是 Java Beans specification. 该规范第 6.4 节的一部分:

Since the new Java event model is based on method invocation we need a way of defining and grouping event handling methods. We require that event handling methods be defined in EventListener interfaces that inherit from java.util.EventListener. By convention these EventListener interfaces are given names ending in “Listener”.

A class that wants to handle any of the set of events defined in a given EventListener interface should implement that interface.