我有如下定義: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