编译器错误:: Intellij Idea vs Eclipse

时间:2011-02-14 14:30:41

标签: java eclipse intellij-idea

不同的开发人员在我的团队中使用不同的IDE。一个Intellij Idea用户编写了这样的代码

public class Bar<A> extends AbstractSet<Bar.Inner> {  
    class Inner {
    }

    @Override
    public Iterator<Inner> iterator() {
        return null;
    }

    @Override
    public int size() {
        return 0;
    }
}

其他人(eclipse用户)说它只用替换编译

 public Iterator<Inner> iterator() {

 public Iterator<Bar.Inner> iterator() {

 extends AbstractSet<Bar.Inner>

 extends AbstractSet<Bar<A>.Inner>
 extends AbstractSet<Bar<?>.Inner>//other variant

什么是正确的编译器行为?哪里可以列出这些问题?

其他信息
日食:

  • 版本:Helios Service Release 1
  • build:20100917-0705
  • jdk:1.6.0_23(在计算机上安装)

想法:

  • 版本:10.0.2
  • build:103.72
  • jdk:1.6.0_21(通过帮助 - &gt;关于)

UPD 这是我的失败。 Idea会报告它,但仅限于应用程序构建。但是,我认为,这也是Idea的错误。

5 个答案:

答案 0 :(得分:2)

这看起来更像是一个基础JDK版本问题而不是IDE版本 - 如果你检查它们都使用相同的版本,例如JDK 1.6.0_23?

答案 1 :(得分:1)

我敢打赌,Eclipse JDK是一个与Sun不同的IBM变体。

答案 2 :(得分:1)

您在about对话框中看到的JDK版本是运行的IDEA IDEA。用于编译的JDK位于项目结构 - &gt;项目 - &gt;项目SDK。

我已经使用java 1.6_20,openjdk 1.6.20和java 1.7.0在Windows上的IDEA Community 10.0.1上测试了您的代码。这三个都给了我编译错误。您还可以将IDEA设置为使用eclipse编译器:设置 - &gt;编译器 - &gt; Java编译器 - &gt;使用编译器:Eclipse。它还会出现编译错误:

Eclipse编译器:

The return type is incompatible with <Test.Inner>.iterator()

Java 7:

Bar is not abstract and does not override abstract method iterator() in AbstractCollection

iterator() in Bar cannot override iterator() in AbstractCollection

method does not override or implement a method from a supertype

Java 6和OpenJDK 6:

Bar is not abstract and does not override abstract method iterator() in java.util.AbstractCollection

iterator() in Bar cannot override iterator() in java.util.AbstractCollection; attempting to use incompatible return type
found   : java.util.Iterator<Bar<A>.Inner>
required: java.util.Iterator<Bar.Inner>

method does not override or implement a method from a supertype

所以这不是IDEA问题,而是用于编译的JDK。

答案 3 :(得分:1)

正如duffymo之前所说,Eclipse不使用Sun的JDK,而是使用自己的编译器(它更好地支持连续编译并在执行期间忽略一些错误)。

然而,Eclipse团队的目标是尽可能地与Sun JDK保持一致的行为。因此,如果您收到一个您认为应该修复的错误,那么您应该向Eclipse团队报告错误。

可以在我的blog中阅读此类其他行为。

答案 4 :(得分:0)

前段时间我有同样的错误。 Eclipse在这里有错误,编译器没有抱怨,而使用javac进行编译时显示错误。我很久以前就提交了一个bug,但它们似乎不再存在于数据库中了。