Java泛型编译器错误:What';怎么了?

Java泛型编译器错误:What';怎么了?,java,generics,compiler-errors,Java,Generics,Compiler Errors,我目前正在尝试使用通用侦听器编程一个事件系统 应将所有侦听器添加到单个EventSource对象,该对象将为特定事件调用其receiveEvent()方法。 事件来源: 公共类事件源{ 私有HashMap问题是您正在迭代一个列表。非常感谢您的工作。但我仍然不明白为什么这不起作用。当我初始化ClassImagine 2Event子类、Event1和Event2类型的字段时,t理论上可能是de>Event1和?可能是Event2,在这种情况下,它们将不兼容。编译器与泛型的工作是确保类型安全,并且由于

我目前正在尝试使用通用侦听器编程一个事件系统
应将所有侦听器添加到单个EventSource对象,该对象将为特定事件调用其receiveEvent()方法。

事件来源:

公共类事件源{

私有HashMap问题是您正在迭代一个
列表。非常感谢您的工作。但我仍然不明白为什么这不起作用。当我初始化
ClassImagine 2
Event
子类、
Event1
Event2
类型的字段时,
t
理论上可能是de>Event1
可能是
Event2
,在这种情况下,它们将不兼容。编译器与泛型的工作是确保类型安全,并且由于这种可能性,它必须禁止将可能不兼容的参数传递给方法。好的,我想我有点明白了。非常感谢!
public class EventSource {

private HashMap<String, List<EventListener<? extends Event>>> events = new HashMap<>();

public synchronized <T extends Event> void fireEvent(T event){
    String key = event.getClass().getName();
    if(events.containsKey(key)){
        Iterator<EventListener<? extends Event>> i = events.get(key).iterator();
        while(i.hasNext()){
            i.next().receiveEvent(event); //Compiler Error
        }
    }
}
public interface EventListener<T extends Event> {
    public void receiveEvent(T event);
}
// Removed wildcard
private HashMap<String, List<EventListener<Event>>> events = new HashMap<>();

public synchronized <T extends Event> void fireEvent(T event){
  String key = event.getClass().getName();
  if(events.containsKey(key)){
     // Removed wildcard.
     Iterator<EventListener<Event>> i = events.get(key).iterator();
     while(i.hasNext()){
        i.next().receiveEvent(event); // This compiles now.
     }
  }
}