我不了解从javax.swing.event.EventListenerList docs摘录的这段代码的原理:

protected void fireFooXXX() {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
        if (listeners[i]==FooListener.class) {
            // Lazily create the event:
            if (fooEvent == null)
                fooEvent = new FooEvent(this);
            ((FooListener)listeners[i+1]).fooXXX(fooEvent);
        }
    }
}
  • 为什么列表向后遍历?
  • 为什么只隔一秒钟调用一次监听器?

  • 事件触发是通过javax.swing.tree.DefaultTreeModel等方式完全实现的,因此显然我什么都没得到。

    最佳答案

  • 可能的性能考虑:向后迭代速度更快,因为与0的比较是单条机器代码指令-尽管如今这已经无关紧要,但许多前C程序员已经根深蒂固了。请注意,不能保证反正将通知听众的顺序。
  • 查看该类的其余部分-它还存储监听器的类型,以提供类型安全性。
  • 10-02 03:41