eclipse java c 分开_Eclipse和javac之间奇怪的编译器区别

以下代码段(从实际代码中抽象出来)在

Eclipse中编译和运行.

包1 / 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();

}

}

}

包2 / 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语句的顺序,如下:

import package2.Bar;

import package1.Outer.Mid.Inner;

…然后它在Eclipse和javac中编译.很明显,导入语句的顺序似乎很重要……但为什么呢?

笔记:

>我使用Java JDK 1.6.0_30以及Java JDK 1.7.0_21对此进行了测试.如果这是一个已修复的错误,那将是很好的知道.

>对我来说,似乎很奇怪package1.Outer.Mid.Inner导入甚至是必要的,因为Inner接口嵌套在Outer.java中,但是Eclipse和javac似乎都需要它

>我发现这个问题试图运行具有类似结构的生产代码的Ant构建.在Eclipse中一切都很好,但Ant脚本却拒绝通过.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值