Начиная с этих классов
public class Event {
private EventType eventType;
public EventType getEventType() {
return eventType;
}
public void setEventType(EventType eventType) {
this.eventType = eventType;
}
}
public class OneEvent extends Event {
public OneEvent() {
setEventType(EventType.ONE);
}
}
public interface EventProcessor<T extends Event> {
Stream<? extends Event> process(T element);
EventType getType();
}
public enum EventType {
ONE, TWO
}
Я создал OneEventProcessor и TwoEventProcessor, которые его реализуют.
public class OneEventProcessor implements EventProcessor<OneEvent> {
@Override
public Stream<? extends Event> process(OneEvent element) {
return null;
}
@Override
public EventType getType() {
return EventType.ONE;
}
}
В другом классе я хочу добавить ихк типу карты-> процессор, а затем получить и использовать.
Map<EventType, EventProcessor<? extends Event>> map = new HashMap<>();
OneEventProcessor oep = new OneEventProcessor();
map.put(oep.getType(), oep);
public Stream<? extends Event> process(Event event) {
return map.get(event.getEventType()).process(event);
}
Это не работает, потому что карта будет получать EventProcessor <?расширяет событие>, которое ожидает захват <?расширяет Event> в методе процесса.
Как я могу обойти это?