Package org.apache.commons.lang3.event
Class EventListenerSupport<L>
- java.lang.Object
-
- org.apache.commons.lang3.event.EventListenerSupport<L>
-
- Type Parameters:
L- the type of event listener that is supported by this proxy.
- All Implemented Interfaces:
java.io.Serializable
public class EventListenerSupport<L> extends java.lang.Object implements java.io.SerializableAn EventListenerSupport object can be used to manage a list of event listeners of a particular type. The class provides
addListener(Object)andremoveListener(Object)methods for registering listeners, as well as afire()method for firing events to the listeners.To use this class, suppose you want to support ActionEvents. You would do:
public class MyActionEventSource { private EventListenerSupport<ActionListener> actionListeners = EventListenerSupport.create(ActionListener.class); public void someMethodThatFiresAction() { ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "somethingCool"); actionListeners.fire().actionPerformed(e); } }Serializing an
EventListenerSupportinstance will result in any non-Serializablelisteners being silently dropped.- Since:
- 3.0
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classEventListenerSupport.ProxyInvocationHandlerAn invocation handler used to dispatch the event(s) to all the listeners.
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<L>listenersThe list used to hold the registered listeners.private L[]prototypeArrayEmpty typed array for #getListeners().private LproxyThe proxy representing the collection of listeners.private static longserialVersionUIDSerialization version
-
Constructor Summary
Constructors Modifier Constructor Description privateEventListenerSupport()Create a new EventListenerSupport instance.EventListenerSupport(java.lang.Class<L> listenerInterface)Creates an EventListenerSupport object which supports the provided listener interface.EventListenerSupport(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)Creates an EventListenerSupport object which supports the provided listener interface using the specified class loader to create the JDK dynamic proxy.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddListener(L listener)Registers an event listener.voidaddListener(L listener, boolean allowDuplicate)Registers an event listener.static <T> EventListenerSupport<T>create(java.lang.Class<T> listenerInterface)Creates an EventListenerSupport object which supports the specified listener type.protected java.lang.reflect.InvocationHandlercreateInvocationHandler()Create theInvocationHandlerresponsible for broadcasting calls to the managed listeners.private voidcreateProxy(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)Create the proxy object.Lfire()Returns a proxy object which can be used to call listener methods on all of the registered event listeners.(package private) intgetListenerCount()Returns the number of registered listeners.L[]getListeners()Get an array containing the currently registered listeners.private voidinitializeTransientFields(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)Initialize transient fields.private voidreadObject(java.io.ObjectInputStream objectInputStream)Deserialize.voidremoveListener(L listener)Unregisters an event listener.private voidwriteObject(java.io.ObjectOutputStream objectOutputStream)Serialize.
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
Serialization version- See Also:
- Constant Field Values
-
listeners
private java.util.List<L> listeners
The list used to hold the registered listeners. This list is intentionally a thread-safe copy-on-write-array so that traversals over the list of listeners will be atomic.
-
proxy
private transient L proxy
The proxy representing the collection of listeners. Calls to this proxy object will sent to all registered listeners.
-
prototypeArray
private transient L[] prototypeArray
Empty typed array for #getListeners().
-
-
Constructor Detail
-
EventListenerSupport
public EventListenerSupport(java.lang.Class<L> listenerInterface)
Creates an EventListenerSupport object which supports the provided listener interface.- Parameters:
listenerInterface- the type of listener interface that will receive events posted using this class.- Throws:
java.lang.NullPointerException- iflistenerInterfaceisnull.java.lang.IllegalArgumentException- iflistenerInterfaceis not an interface.
-
EventListenerSupport
public EventListenerSupport(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)
Creates an EventListenerSupport object which supports the provided listener interface using the specified class loader to create the JDK dynamic proxy.- Parameters:
listenerInterface- the listener interface.classLoader- the class loader.- Throws:
java.lang.NullPointerException- iflistenerInterfaceorclassLoaderisnull.java.lang.IllegalArgumentException- iflistenerInterfaceis not an interface.
-
EventListenerSupport
private EventListenerSupport()
Create a new EventListenerSupport instance. Serialization-friendly constructor.
-
-
Method Detail
-
create
public static <T> EventListenerSupport<T> create(java.lang.Class<T> listenerInterface)
Creates an EventListenerSupport object which supports the specified listener type.- Type Parameters:
T- the type of the listener interface- Parameters:
listenerInterface- the type of listener interface that will receive events posted using this class.- Returns:
- an EventListenerSupport object which supports the specified listener type.
- Throws:
java.lang.NullPointerException- iflistenerInterfaceisnull.java.lang.IllegalArgumentException- iflistenerInterfaceis not an interface.
-
fire
public L fire()
Returns a proxy object which can be used to call listener methods on all of the registered event listeners. All calls made to this proxy will be forwarded to all registered listeners.- Returns:
- a proxy object which can be used to call listener methods on all of the registered event listeners
-
addListener
public void addListener(L listener)
Registers an event listener.- Parameters:
listener- the event listener (may not benull).- Throws:
java.lang.NullPointerException- iflistenerisnull.
-
addListener
public void addListener(L listener, boolean allowDuplicate)
Registers an event listener. Will not add a pre-existing listener object to the list ifallowDuplicateis false.- Parameters:
listener- the event listener (may not benull).allowDuplicate- the flag for determining if duplicate listener objects are allowed to be registered.- Throws:
java.lang.NullPointerException- iflistenerisnull.- Since:
- 3.5
-
getListenerCount
int getListenerCount()
Returns the number of registered listeners.- Returns:
- the number of registered listeners.
-
removeListener
public void removeListener(L listener)
Unregisters an event listener.- Parameters:
listener- the event listener (may not benull).- Throws:
java.lang.NullPointerException- iflistenerisnull.
-
getListeners
public L[] getListeners()
Get an array containing the currently registered listeners. Modification to this array's elements will have no effect on theEventListenerSupportinstance.- Returns:
- L[]
-
writeObject
private void writeObject(java.io.ObjectOutputStream objectOutputStream) throws java.io.IOExceptionSerialize.- Parameters:
objectOutputStream- the output stream- Throws:
java.io.IOException- if an IO error occurs
-
readObject
private void readObject(java.io.ObjectInputStream objectInputStream) throws java.io.IOException, java.lang.ClassNotFoundExceptionDeserialize.- Parameters:
objectInputStream- the input stream- Throws:
java.io.IOException- if an IO error occursjava.lang.ClassNotFoundException- if the class cannot be resolved
-
initializeTransientFields
private void initializeTransientFields(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)
Initialize transient fields.- Parameters:
listenerInterface- the class of the listener interfaceclassLoader- the class loader to be used
-
createProxy
private void createProxy(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)
Create the proxy object.- Parameters:
listenerInterface- the class of the listener interfaceclassLoader- the class loader to be used
-
createInvocationHandler
protected java.lang.reflect.InvocationHandler createInvocationHandler()
Create theInvocationHandlerresponsible for broadcasting calls to the managed listeners. Subclasses can override to provide custom behavior.- Returns:
- ProxyInvocationHandler
-
-