我在 Eclipse 和我的 JDK 认为合法的 java 之间遇到了一个有趣的差异。
Eclipse 可以顺利编译以下类,而 Mac OS X 上的 JDK 会产生以下错误。
public class Builder {
private class Item {}
public void addItem(Item i) {}
public static void main(String[] args) {
new Builder() {{
addItem(new Item());
}};
}
}
$ javac Builder.java
Builder.java:9: non-static variable this cannot be referenced from a static context
addItem(new Item());
^
1 error
使Item
类静态解决了这个问题,但它让我有点好奇:Eclipse 是否宽容并编译实际上无效的代码?我是否偶然发现了 Mac OS X JDK 的古怪之处?我错过了什么吗?
更新 可能与包括以下内容有关
$ java -version
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)
更新 2
使 Item 更可见(默认、受保护或公共)也满足 JDK 编译器的要求。