I have a receiver class that puts messages in a message queue as following
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() {
    ...
  }
}
When trying to add messages as this
public <T extends MessageBase> void processMessage(T msg) {
    for (Receiver<? extends MessageBase> r : receivers) {
        if (msg.getClass().equals(r.getType())) {
            r.add(msg);
        }
    }
}
I get a
The method add(capture#3-of ? extends MessageBase) in the type 
Receiver<capture#3-of ? extends MessageBase> is not applicable 
for the arguments (T)
since the Receiver class is casted to extend MessageBase should it not work to add messages which are subclasses of MessageBase?
 
     
     
    