[英]compiler errors::Intellij Idea vs Eclipse
在我们的团队中,不同的开发人员使用不同的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
正确的编译器行为是什么? 在哪里可以找到此类问题的清单?
附加信息
日食:
理念:
UPD这是我的失败。 Idea对此进行了报告,但仅在应用程序构建时报告。 但是,我认为,这也是Idea的错误。
这似乎是潜在的JDK版本问题,而不是IDE的问题-您是否检查过它们是否都使用相同的版本,例如JDK 1.6.0_23?
我敢打赌,Eclipse JDK是与Sun不同的IBM变体。
在“关于”对话框中看到的JDK版本是运行IDEA的Java版本。 用于编译的JDK在项目结构->项目->项目SDK中。
我已经使用Java 1.6_20,openjdk 1.6.20和Java 1.7.0在Windows的IDEA社区10.0.1上测试了您的代码。 这三个都给了我编译器错误。 您还可以将IDEA设置为使用Eclipse编译器:设置->编译器-> Java编译器->使用编译器: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的问题。
如duffymo之前所述,Eclipse不使用Sun的JDK,而是使用他们自己的编译器(该编译器对连续编译和执行过程中的一些错误提供了更好的支持)。
但是,Eclipse团队的目标是使Sun JDK尽可能保持一致的行为。 因此,如果遇到您认为应该纠正的错误,则应向Eclipse团队报告错误。
这样的另一种行为可以在我的博客中阅读。
我前段时间有同样的错误。 Eclipse在这里存在错误,使用javac进行编译时,编译器没有抱怨并显示错误。 我很久以前就提交了一个错误,但是他们似乎不再在数据库中包含该错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.