簡體   English   中英

使用泛型處理事件

[英]Using generics to handle events

我有幾個事件(每個都有監聽器)。 我想代替這個:

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循環編寫代碼...是否有可能做我想做的事情,還是必須編寫一堆幾乎相同的方法?

好吧,為什么不將偵聽器內容封裝到一個專用類中呢?

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

或類似的東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM