У меня есть класс "Event" с одним общим аргументом - T. Это тип Event и всегда интерфейс.Слушатель событий должен реализовывать типы событий, которые он хочет «прослушать».
Например:
public class GuiHandler implements Startup, GuiChanged
Но есть только один способ зарегистрировать этот слушатель событий.Просто возьмите все события, которые он реализует, и вызовите метод «register» с экземпляром прослушивателя событий или ссылкой на метод.
Я пытаюсь создать класс «EventManager», который мог бы определять, реализует ли класс данного объекта «event.getType».() (который возвращает T события) "и, если это так, приведите объект к этому типу события и зарегистрируйтесь в событии.
public static void register(Object listener) {
for (Event<?> event : Event.EVENTS)
if (listener.getClass().isInstance(event.getType()))
event.register(event.getType().cast(listener));
}
Но по какой-то причине он говорит
Регистр метода (захват # 3-из?) В типе Event не применим для аргументов (захват # 4-из?)
События создаются следующим образом:
new Event<>(GuiChanged.class, (listeners) ->
(/*some event specific arguments*/) -> {
for (GuiChanged event : listeners) {
event.onGuiSchnged(/*some event specific arguments*/);
}
});
И конструктор:
public Event(Class<T> type, Function<T[], T> functionToUse) {
this.type = type;
this.functionToUse = functionToUse;
EVENTS = Arrays.copyOf(EVENTS, EVENTS.length + 1);
EVENTS[EVENTS.length - 1] = this;
}
Пожалуйста, помогите.Я верю, что это возможно.