[英]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.