Когда я узнал, как запускать события на Java, я познакомился с EventListenerList. Когда я создаю своих собственных слушателей, я пишу слушателю, чтобы он расширил EventListener, я храню их в EventListenerList, и мой метод пожара будет проходить через прослушиватели событий следующим образом:
protected void fireChangeOccurred(Change change) {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==ChangeListener.class) {
((ChangeListener)listeners[i+1]).changeOccurred(change);
}
}
}
Теперь я просматриваю код, который просто помещает слушателей в HashMap (может быть любой коллекцией), интерфейс прослушивателя не расширяет EventListener, и метод пожара выглядит следующим образом:
protected void fireChangeOccurred(Change change) {
for (ChangeListener listener : listeners) {
listener.changeOccurred(change);
}
}
Каковы преимущества использования EventListenerList вместо того, чтобы просто поддерживать собственный список слушателей?. Действительно ли это имеет значение только в том случае, если слушатели находятся в компоненте Swing - имеет значение для потока событий?