これは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によって生成されます。
エラーメッセージは、クラスがObject
型付きパラメータを取るcompareToメソッドを宣言し、このクラスがDelayed
を必要とすることをコンパイラが要求することを示します。 しかし、ScheduledFuture
インターフェイスは、Delayed
のように定義されており、順番にはComparable<Delayed>
というように拡張されています。私はちょうどそれがコンパイル
private class Example implements ScheduledFuture<Object>
に宣言を変更した場合
。
私はそれが何らかの形で消去と関係していると推測していますが、私は自分自身を満足させるためにそれを実際に説明することはできません。
私はあなたのところでは、ScheduledFutureのjavadocを1.6と1.7から探し、何が変更されたかを確認します。 – Ingo
Java 6では、パラメータ化されたクラスからの生の型継承を防ぐことはできませんでした。 – fglez