我不明白爲什麼編譯器不接受此代碼,Java泛型編譯錯誤
import javax.swing.event.EventListenerList;
import java.util.EventListener;
public class GenericEventsManager {
EventListenerList listeners = new EventListenerList();
public <T extends EventListener> void addListener(T listener) {
listeners.add(listener.getClass(), listener);
}
}
我得到的錯誤是
The method add(Class<T>, T) in the type EventListenerList is not applicable for the arguments (Class<capture#1-of ? extends EventListener>, T)
中的addListener的論點是,延伸的類型EventListener,所以listener.getClass()返回Class<? extends EventListener>
,這正是EventListenerList.add方法所期望的。
有人可以解釋這一點嗎?我有一種感覺,它是與的getClass()未在編譯時解決,但它仍然沒有任何意義,我
他們怎麼能不一樣? – Hilikus
@Hilikus看到我的編輯。 –
我明白了。爲什麼編譯器不能更進一步,弄清楚T **是**「?extends EventListener」? – Hilikus