Как связать обработчики в HandlerManager? - PullRequest
0 голосов
/ 29 ноября 2011

есть ли возможность объединить разные обработчики событий в один javafile?

Как:

public interface MyHandlerr extends EventHandler {
void myEvent1(Event1 event);
void myEvent2(Event2 event);
}

в тот момент, когда у меня есть для каждого события один обработчик .... но яне доволен этим.

привет

1 Ответ

1 голос
/ 30 ноября 2011

Вы можете создать свой собственный EventHandler интерфейс для обработки нескольких событий

public interface MultipleEventsHandler extends EventHandler {
    void onMyEvent(MyEvent event);
    void onMyOtherEvent(MyOtherEvent event);
}

Затем в ваших классах событий вы можете определить, какой из методов должен быть вызван

public class MyEvent extends GwtEvent<MultipleEventsHandler> {
    public static final Type<MultipleEventsHandler> TYPE = new Type<MultipleEventsHandler>();

    @Override
    public Type<MultipleEventsHandler> getAssociatedType() {
            return TYPE;
    }

    @Override
    protected void dispatch(MultipleEventsHandler handler) {
            handler.onMyEvent(this);
    }
}

public class MyOtherEvent extends GwtEvent<MultipleEventsHandler> {
    public static final Type<MultipleEventsHandler> TYPE = new Type<MultipleEventsHandler>();

    @Override
    public Type<MultipleEventsHandler> getAssociatedType() {
            return TYPE;
    }

    @Override
    protected void dispatch(MultipleEventsHandler handler) {
            handler.onMyOtherEvent(this);
    }
}

Если вы просто хотите уменьшить количество классов / интерфейсов, вы можете поместить EventHandler в классы событий, например,

public class MyEvent extends GwtEvent<MyEvent.Handler> {

    public interface Handler extends EventHandler {
        void onMyEvent(SomeEvent event);
    }

    public static final Type<MyEvent.Handler> TYPE = new Type<MyEvent.Handler>();


    @Override
    public Type<MyEvent.Handler> getAssociatedType() {
            return TYPE;
    }

    @Override
    protected void dispatch(MyEvent.Handler handler) {
            handler.onMyOtherEvent(this);
    }
}
...