[英]Java Generics Compiler Error: What's wrong?
我目前正在尝试使用通用侦听器对事件系统进行编程。
所有侦听器都应添加到单个EventSource对象,该对象将针对特定事件调用其receiveEvent()方法。
EventSource :
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
}
}
}
产生的错误是:
类型EventListener的方法receiveEvent(capture#2-of?extended Event)不适用于参数(T)
EventListener仅是:
public interface EventListener<T extends Event> {
public void receiveEvent(T event);
}
有人可以解释我在做什么错吗?
问题是您要遍历List<EventListener<? extends Event>>
List<EventListener<? extends Event>>
,但是编译器不知道哪个类, Event
或子类Event
中, ?
通配符可以。 该T
类型参数也可以是Event
或任何子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.
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.