Quando ho imparato a generare eventi in Java, ho acquisito familiarità con EventListenerList. Quando creo i miei ascoltatori, scrivo l'ascoltatore modo che si estende EventListener, li devo conservare in un eventListenerList, e il mio metodo di fuoco sarebbe passare attraverso i listener di eventi come questo: codiceQuando utilizzare EventListenerList anziché una raccolta generale di listener
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);
}
}
}
Ora sto rivedendo che semplicemente mette gli ascoltatori in un HashMap (potrebbe essere qualsiasi raccolta), l'interfaccia ascoltatore non si estende EventListener, e il metodo di fuoco assomiglia a questo:
protected void fireChangeOccurred(Change change) {
for (ChangeListener listener : listeners) {
listener.changeOccurred(change);
}
}
Quali sono i vantaggi di utilizzare eventListenerList invece di mantenere la mia lista di ascoltatori? Interessa solo se gli ascoltatori si trovano in un componente Swing: è importante per il thread di invio eventi?
Giusto per essere sicuri, quei 2 loop non sono uguali: il primo itera l'ultimo al primo e il secondo itera il penultimo. Se un listener è autorizzato a rimuovere se stesso (che di solito sono), allora ti consigliamo di eseguire un'iterazione dell'ultimo per evitare di saltare l'ascoltatore successivo se quello corrente viene rimosso. –