有人可以解释为什么它在 JDK 1.6 中编译,而不是在 JDK 1.7 中编译,我从中得到错误消息:
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>
它编译。
我猜这与类型擦除有关,但我无法真正解释它来满足自己。