【发布时间】:2019-04-30 11:12:37
【问题描述】:
我有一个令人困惑的问题。首先这里是一个最小的代码示例:
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 可以处理这个问题而其他的不行?
这里是我的软件版本:
- Eclipse 2018-09 (4.9.0)
- Intellij 2018.1.3
- Maven 3.3.1
- Oracle JDK 8u181
更新:
我将此问题报告给 Oracle,他们可以重现此问题。这是 Oracle 编译器中的一个错误 (Java Bug Database)
【问题讨论】:
-
Maven 和 Intellij 都使用(默认情况下)Oracle JDK 的
javac,而 Eclipse 有自己的 Java 编译器。哪个编译器在这里由Java Language Specification 决定。
标签: java eclipse maven intellij-idea compilation