Использование обобщений для обработки событий - PullRequest
0 голосов
/ 15 октября 2011

У меня есть несколько событий (и слушателей для каждого).Я хотел бы вместо этого:

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 ]

1 голос
/ 15 октября 2011

Ну, почему бы не включить материал слушателя в отдельный класс?

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>();
0 голосов
/ 15 октября 2011
private <L extends MyEventTypeListenerSuperclass, E extends MyEventTypeSuperclass> void alertListeners(E ev, List<L> listeners){
    for(L el : listeners){
        el.handle(ev);
    }
}

или что-то в этом роде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...