有人可以解釋爲什麼這將編譯JDK 1.6,但不是在JDK 1.7從中我得到的錯誤信息:的Java 7,但不是Java 6:「不是抽象的,不重寫抽象方法」
java:示例不是抽象的,並且不會覆蓋java.lang.Comparable中的抽象方法compareTo(java.lang.Object)?
import java.util.concurrent.*;
public class Example implements ScheduledFuture
{
@Override public long getDelay(TimeUnit unit){ return 0; }
@Override public int compareTo(Delayed o) { return 0; }
@Override public boolean cancel(boolean mayInterruptIfRunning) { return false; }
@Override public boolean isCancelled() { return false; }
@Override public boolean isDone() { return false; }
@Override public Object get() throws InterruptedException, ExecutionException { return null; }
@Override public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return null; }
}
爲了您的信息,被寫的IntelliJ只類聲明後生成的這個類中的方法。
錯誤消息指示編譯器要求該類聲明一個compareTo方法,該方法需要一個Object
類型的參數,並且該類需要Delayed
。 但是,ScheduledFuture
接口被定義爲擴展Delayed
,這反過來又擴展了Comparable<Delayed>
所以對我來說一切似乎都是按順序的。
如果我只是改變了聲明
private class Example implements ScheduledFuture<Object>
它編譯。
我猜它與某種類型的擦除有關,但我無法真正解釋它來滿足自己。
我在你的地方會查找1.6和1.7中的ScheduledFuture的javadoc,並檢查發生了什麼變化。 – Ingo
它發生在我身上,Java 6不會阻止來自參數化類的原始類型繼承,而是7 – fglez