У меня запутанная проблема.Во-первых, вот минимальный пример кода:
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 не является абстрактным и делаетне переопределять абстрактный метод getValue () в I
Если я компилирую Программу в Eclipse, она компилируется успешно.
Кто-нибудь может мне объяснить, почему eclipse может справиться с этим, а все остальные нет?
Здесь мои версии программного обеспечения:
- Eclipse 2018-09 (4.9.0)
- Intellij 2018.1.3
- Maven 3.3.1
- Oracle JDK 8u181
ОБНОВЛЕНИЕ:
Я сообщаю об этой проблеме в Oracle, и они могут воспроизвести эту проблему.Это ошибка в компиляторе Oracle ( Java Bug Database )