次のようにメッセージをメッセージキューに入れるレシーバークラスがあります
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