在IDEA中使用Eclipse编译器和JDK 8时,"java:名为XXX的重复方法"问题

Gel*_*Luo 8 eclipse compiler-construction intellij-idea java-8

使用以下简单类,java: Duplicate methods named spliterator with the parameters () and () are inherited from the types java.util.List<T> and java.lang.Iterable<T>如果在IDEA中使用Eclipse编译器和JDK 8,我会收到错误:

public class Java8Test {
    public static interface Traverable<T> extends Iterable<T> {}
    public static interface List<T> extends Traverable<T>, java.util.List<T> {}
}
Run Code Online (Sandbox Code Playgroud)

如果将编译器更改为javac,则没有错误.如果使用eclipse编译器切换到JDK 6,错误也会消失.

IDEA版本:12.1.5

Fab*_*tel 5

尝试使用Java 8 JDK编译Java 7代码时遇到了同样的错误.

对我有用的解决方案是将Eclipse中配置的JRE更改为Java 7 : Window -> Preferences -> Java -> Installed JREs. 编辑现有的并选择包含Java 7 JDK的目录.


El *_*rce 0

我遇到过同样的问题。Eclipse 的 4.3 JTD 似乎与 Java8 配合得不好。根据 Stephan Herrmann (CLA) 的说法:

Java 7 编译器不应该尝试针对 JRE 8 进行编译。场景的真正兼容性没有在任何地方指定,甚至可能不可能,因为已以确保旧代码的运行时兼容性的方式添加到库中的默认方法但 兼容 Java 7 编译器和新库的编译时兼容性。因此,我将此错误标记为无效,这是我们无法通过设计支持的。

您可以在这里阅读更多内容:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=407010

和这里:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=409473

https://bugs.eclipse.org/bugs/show_bug.cgi?id=390889

  • 换句话说,不要在比 Java 编译器支持的新版本的 Java 中使用给定版本的 Java 编译器。如果您需要 Java 8,请在 Java 8 上运行。 (2认同)