Java のenum
機能によって提供されるシンタックス シュガーは、少し混乱することがあります。コンパイルされない次の例を考えてみましょう。
public enum TestEnum {
FOO("foo") {
public void foo() {
helper(); // <- compiler error
}
};
String name;
TestEnum(String name) {
this.name = name;
}
public abstract void foo();
private void helper(){
// do stuff (using this.name, so must not be static)
}
}
コンパイラが言う理由を誰でも説明できますか
非静的メソッド 'helper()' は静的コンテキストから参照できません
このコンテキストはどのくらい正確に静的ですか?
への呼び出しを変更するか(ここで 1 つの紛らわしい点があります: コンパイラが示唆するような「静的コンテキスト」に実際にいる場合、" " はどのように機能するのでしょうか?)、または の可視性をデフォルト レベルに上げることによって、このコンパイルを行うことができます。どちらがいいですか?また、より良い質問のタイトルを提案してください:-)this.
helper()
this
helper()
編集:これについていくつかの議論を見つけましたが、本当の答えはありません。this.helper()
私の同僚は、それが機能するという事実は、実際にはコンパイラのバグだと考えています。実際、新しい Java バージョンでは動作しないようです(動作しますsuper.helper()
が): 「シンボル ヘルパー () が見つかりません」。(奇妙なことが起こっていますが:異なるJavaバージョンで試した後this.helper()
、それらのいずれでも再度コンパイルすることはできません...)