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.Serializable
An 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
EventListenerSupport
instance will result in any non-Serializable
listeners being silently dropped.- Since:
- 3.0
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
EventListenerSupport.ProxyInvocationHandler
An 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>
listeners
The list used to hold the registered listeners.private L[]
prototypeArray
Empty typed array for #getListeners().private L
proxy
The proxy representing the collection of listeners.private static long
serialVersionUID
Serialization version
-
Constructor Summary
Constructors Modifier Constructor Description private
EventListenerSupport()
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 void
addListener(L listener)
Registers an event listener.void
addListener(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.InvocationHandler
createInvocationHandler()
Create theInvocationHandler
responsible for broadcasting calls to the managed listeners.private void
createProxy(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)
Create the proxy object.L
fire()
Returns a proxy object which can be used to call listener methods on all of the registered event listeners.(package private) int
getListenerCount()
Returns the number of registered listeners.L[]
getListeners()
Gets an array containing the currently registered listeners.private void
initializeTransientFields(java.lang.Class<L> listenerInterface, java.lang.ClassLoader classLoader)
Initialize transient fields.private void
readObject(java.io.ObjectInputStream objectInputStream)
Deserialize.void
removeListener(L listener)
Unregisters an event listener.private void
writeObject(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
- iflistenerInterface
isnull
.java.lang.IllegalArgumentException
- iflistenerInterface
is 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
- iflistenerInterface
orclassLoader
isnull
.java.lang.IllegalArgumentException
- iflistenerInterface
is 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
- iflistenerInterface
isnull
.java.lang.IllegalArgumentException
- iflistenerInterface
is 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
- iflistener
isnull
.
-
addListener
public void addListener(L listener, boolean allowDuplicate)
Registers an event listener. Will not add a pre-existing listener object to the list ifallowDuplicate
is 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
- iflistener
isnull
.- 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
- iflistener
isnull
.
-
getListeners
public L[] getListeners()
Gets an array containing the currently registered listeners. Modification to this array's elements will have no effect on theEventListenerSupport
instance.- Returns:
- L[]
-
writeObject
private void writeObject(java.io.ObjectOutputStream objectOutputStream) throws java.io.IOException
Serialize.- 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.ClassNotFoundException
Deserialize.- 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 theInvocationHandler
responsible for broadcasting calls to the managed listeners. Subclasses can override to provide custom behavior.- Returns:
- ProxyInvocationHandler
-
-