Eclipseと私のJDKが合法的なJavaと見なすものの間に興味深い矛盾が発生しています。
Eclipseは問題なく次のクラスをコンパイルしますが、MacOSXの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
クラスを静的にすると問題は解決しますが、少し不思議に思います。EclipseItem
は寛大で、実際には有効ではないコードをコンパイルしていますか?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
アイテムをより見やすくする(デフォルト、保護、またはパブリック)ことも、JDKコンパイラーを満たします。