我有把消息在消息隊列如下Java泛型繼承神祕的錯誤
public class Receiver<T extends MessageBase> {
private LinkedBlockingQueue<T> messageQueue = new LinkedBlockingQueue<T>();
public void add(T msg) {
messageQueue.add(msg);
}
public void Class<T> getType() {
...
}
}
當試圖將郵件添加爲此
public <T extends MessageBase> void processMessage(T msg) {
for (Receiver<? extends MessageBase> r : receivers) {
if (msg.getClass().equals(r.getType())) {
r.add(msg);
}
}
}
我得到一個
The method add(capture#3-of ? extends MessageBase) in the type
Receiver<capture#3-of ? extends MessageBase> is not applicable
for the arguments (T)
接收器類
因爲Receiver
類被鑄造爲延伸如果它不工作添加消息是的子類?
看到我的答案[here](http://stackoverflow.com/questions/12604477/use-of-extends-and-super-in-collection-generics/12605337#12605337)。要記住的最好方法是縮寫PECS,生產者'延伸',消費者'超級'。生產者給你提供數據(例如通過'get'方法),所以生產者使用'extends'。你想要的是一個需要數據的消費者(例如通過「add」方法)。請參閱我在該鏈接的解釋以獲取更多信息。 – Brian