我有如下定义:Java的泛型“捕捉到第N-的”编译错误
public interface MessageResponseHandler<T extends MessageBody> {
public void responsed(Message<T> msg);
}
public class DeviceClientHelper {
public MessageResponseHandler<? extends MessageBody> messageHandler;
setHandler(MessageResponseHandler<? extends MessageBody> h){
this.messageHandler = h;
}
public someMethod(Object message){
Message<? extends MessageBody> msg = (Message<? extends MessageBody>) message;
if (this.messageHandler != null) {
this.messageHandler.responsed(msg);
}
}
}
我无法为什么在的someMethod()方法计算出的
this.messageHandler.responsed(msg);
调用
会在eclipse中给我一个有线编译器错误。例如:
the method responsed(Message<capture#3-of ? extends MessageBody>) in
the type MessageResponseHandler<capture#3-of ? extends MessageBody> is
not applicable for the arguments (Message<capture#4-of ? extends
MessageBody>)
无论如何,错误信息中的“catpure”意味着什么?
这是[type erasure](http://docs.oracle.com/javase/tutorial/java/generics/erasure.html)最好的版本。 – Finbarr 2012-01-11 21:12:48
嗯,我有点知道为什么现在。给定MessageResponseHandler <?扩展MessageBody> messageHandler,它必须是某种类型的MessageBody,但不是一般的。但是我怎么能解决这个问题?类型每次都会有所不同。 – Wudong 2012-01-11 21:17:10
@Finbarr这与删除无关。类型只是不完善。 – 2012-01-11 21:26:38