使用泛型来处理事件

时间:2011-10-15 06:04:06

标签: java events generics

我有几个事件(以及每个事件的监听器)。我想,而不是这个:

private void alertListeners(EventType1 ev){
    for(EventType1Listener el : et1Listeners){
        el.handle(ev);
    }
}
private void alertListeners(EventType2 ev){
    for(EventType2Listener el : et2Listeners){
        el.handle(ev);
    }
}
private void alertListeners(EventType3 ev){
    for(EventType3Listener el : et3Listeners){
        el.handle(ev);
    }
}

更像是:

private <T extends MyEventTypeSuperclass> void alertListeners(T ev)

除了我无法弄清楚如何实际编写for循环...是否可以做我想要的,或者我是否必须编写一堆几乎相同的方法?

2 个答案:

答案 0 :(得分:1)

那么,为什么不将监听器内容封装到专用类中呢?

public class Observable<E> {
    private List<Listener<E>> listeners = new ArrayList<L>();

    public void subscribe(Listener<E> listener) {
        listeners.add(listener);
    }

    public void alert(E e) {
        for (Listener<E> l : listeners) {
            l.handle(e);
        }
    }
}

以及提供该事件的类型:

public final Observable<String> messageChannel = new Observable<String>();

public final Observable<Integer> resultChannel = new Observable<Integer>();

答案 1 :(得分:0)

private <L extends MyEventTypeListenerSuperclass, E extends MyEventTypeSuperclass> void alertListeners(E ev, List<L> listeners){
    for(L el : listeners){
        el.handle(ev);
    }
}

或类似的东西