我有一个接收器类将消息放入消息队列中,如下所示
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
类被强制转换为扩展 MessageBase
是否应该添加作为 MessageBase
子类的消息?
最佳答案
当您将泛型与下界(?扩展类型语法)一起使用时,您无法将任何内容添加到您的容器中。
for (Receiver<? extends MessageBase> r : receivers) {
if (msg.getClass().equals(r.getType())) {
r.add(msg);// This is wrong, as you cannot add anything into Receiver
}
}
请参阅此答案以获取 Why it isn't allowed
关于Java泛型继承神秘错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14198159/