Когда я узнал, как запускать события в Java, я познакомился с EventListenerList. Когда я создаю своих собственных слушателей, я пишу слушателя так, чтобы он расширял EventListener, я сохранял их в EventListenerList, и мой метод fire проходил бы через слушателей событий, как это:
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, и метод fire выглядит так:
protected void fireChangeOccurred(Change change) {
for (ChangeListener listener : listeners) {
listener.changeOccurred(change);
}
}
Каковы преимущества использования EventListenerList вместо простого ведения собственного списка слушателей? Имеет ли значение только то, находятся ли слушатели в компоненте Swing - имеет ли это значение для потока диспетчеризации событий?