有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

事件处理,数据结构和程序设计,java

我有一个事件类型列表

enum EventType {
    ErrorEvent, StatusEvent, DataEvent 
}

一个侦听器可以通过调用

addListener (Listener listener,EventType eventType) {
    // to do 
}

有谁能建议,我可以使用什么样的数据结构来存储所有这些信息 (侦听器及其关联的事件类型)

或者任何其他java API类已经支持这一点

数组的数组或 在我看来,这张单子很难看

请建议

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    看起来你和其他很多人一样,正在重新发明著名的PropertyChangeListener/PropertyChangeEvent/PropertyChangeSupport机制。所以,帮自己一个忙,不要创建自己的事件/侦听器层次结构,而是重用通用层次结构,它是专门为bean属性更改(以及所有Java对象)定制的

  2. # 2 楼答案

    使用列表的枚举映射(如果希望侦听器是唯一的,则使用集合)

    private Map<EventType, List<Listener>> listeners = 
      new EnumMap<EventType, List<Listener>>(EventType.class);
    
    public void addListener(Listener listener, EventType eventType) {
      if(null == listeners.get(eventType)) {
        listeners.put(eventType, new ArrayList<Listener>());
      }
    
      listeners.get(eventType).add(listener);
    }
    
    private void sendEvent(Event e) {
      if(listeners.get(e.getType() == null) {
        return;
      }
    
      for(Listener listener : listeners.get(e.getType()) {
        listener.eventOccurred(e);
      }
    }