Я попытался реализовать простой типобезопасный диспетчер событий с данными, т.е. в дополнение к событию можно доставлять любые данные.Я нашел много вопросов о диспетчере безопасных типов событий или любые другие примеры, но никто, похоже, не решил мой вопрос.Это то, что я получил до сих пор:
public interface EventDispatcher {
<T> void registerCallback(Event<T> event, BiConsumer<T, Long> callback);
<T> void event(Event<T> event, T t, long param);
}
и
public interface Event<T> {
String name();
}
Это на самом деле работает (у меня есть рабочая реализация интерфейса EventDispatcher), интерфейс Event может быть «реализован»используя перечисления следующим образом:
public enum StringEvent implements Event<String> {
EVENT1,
EVENT2
}
Меня не устраивает тот факт, что мне нужно создавать разные перечисления для всех объектов, которые я хочу доставить диспетчеру.Я думал о чем-то вроде этого
public enum Events {
EVENT1(String.class),
EVENT2(String.class),
EVENT3(Long.class);
Events(Class<T> clazz) {
...
}
...
}
Но, похоже, это не приводит к объекту события, который можно использовать в диспетчере событий ... Есть идеи?