package org.rr.commons.collection; import java.io.Serializable; import java.util.ConcurrentModificationException; import java.util.EventListener; import java.util.Iterator; import java.util.concurrent.CopyOnWriteArrayList; /** * Using a {@link CopyOnWriteArrayList} which allows to add or remove listeners while * iterating without causing a {@link ConcurrentModificationException}. */ public class ListenerList<L extends EventListener> implements Serializable, Iterable<L> { private static final long serialVersionUID = 1510397925290428532L; private final CopyOnWriteArrayList<L> listeners; public ListenerList() { listeners = new CopyOnWriteArrayList<>(); } public void addListener(L listener) { listeners.add(listener); } public void removeListener(L listener) { listeners.remove(listener); } public int getListenerCount() { return listeners.size(); } /** * Return an {@link Iterator} for the {@link EventListener} instances */ public Iterator<L> iterator() { return listeners.iterator(); } }