[英]Strange compiler difference between Eclipse and javac
以下代碼段(從實際代碼中摘錄)在Eclipse中編譯並運行。
package1 / Outer.java:
package package1;
import package1.Outer.Mid.Inner;
import package2.Bar;
public class Outer {
final Mid mid = new Mid();
public Outer() {
mid.setInner(new Inner() {
@Override public void foo() {
System.out.println("In Outer.foo()");
}
});
}
public static class Mid implements Bar {
private Inner inner;
public void setInner(Inner inner) {
this.inner = inner;
}
public Inner getInner() {
return this.inner;
}
@Override
public void bar() {}
interface Inner {
void foo();
}
}
}
package2 / Bar.java:
package package2;
public interface Bar {
void bar();
}
但是,使用javac進行編譯時,它將失敗並顯示以下錯誤:
package1\Outer.java:31: cannot find symbol
symbol : class Bar
location: class package1.Outer
public static class Mid implements Bar {
^
package1\Outer.java:42: method does not override or implement a method from a supertype
@Override
^
2 errors
現在,如果我切換導入語句的順序,如下所示:
import package2.Bar;
import package1.Outer.Mid.Inner;
...然后在Eclipse和javac中都進行編譯。 顯然,導入語句的順序似乎很重要...但是為什么呢?
筆記:
package1.Outer.Mid.Inner
導入,因為Inner
接口嵌套在Outer.java中,但是Eclipse和javac似乎都需要它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.