All pastes #93341 Raw Edit

Unnamed

public java v1 · immutable
#93341 ·published 2006-07-20 11:26 UTC
rendered paste body
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.ArrayList;import java.util.List;public class ListenerSupport<T> implements InvocationHandler{    protected final T target;    @SuppressWarnings("unchecked")    public ListenerSupport(Class<? extends T> listenerInterface)    {        this.target=(T) Proxy.newProxyInstance(listenerInterface.getClassLoader(),                new Class[] {listenerInterface}, this);    }        public static <T> ListenerSupport<T> create(Class<? extends T> listenerInterface)    {        return new ListenerSupport<T>(listenerInterface);    }        protected List<T> listeners=new ArrayList<T>();    public void add(T listener)    {        if (listeners.contains(listener)) return;        synchronized(listeners)        {            listeners.add(listener);        }    }    public void remove(T listener)    {        synchronized(listeners)        {            listeners.remove(listener);        }    }        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable    {        Object ret=null;        synchronized(listeners)        {            for (T l: listeners)            {                ret=method.invoke(l, args);            }        }        return ret;    }    public T target()    {        return target;    }}