我有一个令人困惑的问题。首先,这是一个最小的代码示例:
public interface I {
<T> T getValue();
}
public abstract class AC<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
public class C extends AC<Integer> implements I {
}
public class Main {
public static void main(String[] args) {
final C c = new C();
c.setValue(1);
final Integer i = c.getValue();
System.out.println(i);
}
}
当我尝试使用 javac 或 Intellij 或 Maven 进行编译时,出现错误:
C 不是抽象的,并且不会覆盖 I 中的抽象方法 getValue()
如果我在 Eclipse 中编译程序,它编译成功。
任何人都可以解释我为什么 eclipse 可以处理这个而其他所有的不能吗?
这是我的软件版本:
- 日食 2018-09 (4.9.0)
- Intellij 2018.1.3
- Maven 3.3.1
- 甲骨文 JDK 8u181
更新:
我将此问题报告给 Oracle,他们可以重现此问题。这是 Oracle 编译器中的一个错误(Java 错误数据库)