私はコーディングの途中で、インスタンス変数を宣言するクラスの部分に誤って次のコード行を配置しました。しかし、チェックしたところ、静的ブロック内、コンストラクター内、クラスメソッド内など、どこでも同じエラーが発生します。 private;
がクラスの最初の行として配置されている場合を除き、カーソルを置くとEclipseツールチップでSyntax error, insert "EnumBody" to complete ClassBodyDeclarations
(@ chaitanya10によって下のコメントに書き込まれ、ワークスペースでも確認されます)エラーが発生しますそれ。
エラーがあることを理解しています。
しかし、エラーの上にカーソルを置くと、エラーメッセージがわかりません。このメッセージの意味は何ですか?
なぜそれはEnumBody
を期待しているのですか?
以下はスクリーンショットです。
実際の説明については、誰かが構文チェックの詳細な分析、およびEclipse Javaコンパイラフロントエンド)の構文エラー回復およびレポートコンポーネントを実行する必要があります。しかし、最も可能性の高い説明は、 「異常な」構文エラーにより、コンパイラの構文エラー回復コードが「混乱」しました。
要するに、それはマイナーなコンパイラのバグ(または機能)です。
開発者はこれを知っている可能性がありますが、次の理由で修正を控えています。
その価値については、次のとおりです。
_public class Foo;
_
エラー:_Syntax error, insert "ClassBody" to complete ClassBodyDeclarations
_
_public enum Foo;
_
エラー:_Syntax error, insert "EnumBody" to complete ClassBodyDeclarations
_
_public interface Foo;
_
エラー_Syntax error, insert "InterfaceBody" to complete ClassBodyDeclarations
_
とにかく、このorg.Eclipse.jdt.internal.compiler.parser.Parser.consumeEnumConstantHeader()
では、次のコードで解析エラーが発生したときに回復しようとします。
_if(this.currentToken == TokenNameSEMICOLON) {
RecoveredType currentType = currentRecoveryType();
if(currentType != null) {
currentType.insideEnumConstantPart = false;
}
}
_
したがって、列挙型の内部にいないことが正しく認識されるため、上記のようなエラーが発生しますが、それが列挙型であるかどうかさえわからないことに気づきません。 ここでソースを見ることができます:
言い換えると、Eclipseチームが列挙型を追加したときに導入したバグである可能性があり、他のトークンとは少し異なる方法で処理されるため、異なる方法で回復されるため、コンパイラエラーに表示されます。
これは、私のコードが正しいにもかかわらず、Eclipseでも私に起こっていました。最初にjar(aspectJ JAR)を追加せずにコードを記述し、JARを追加した後、この問題が発生したために発生しました。
最初にコードをコピーして削除し、貼り付けて、赤い線が消えると機能すると思いましたが、実行時にエラーがスローされました。ただし、クラスを削除して再作成し、まったく同じコードをもう一度入力することで機能しましたが、機能しました。クラスを削除した後はコピーペーストが機能した可能性がありますが、念のために入力しました。
間違いなく奇妙な問題です。私は本からコードをコピーしていたので、コードが正しいことを知っていました(Spring in action第4版-よく読んでください)。とにかく、これがあなたや将来誰かに役立つことを願っています!約1時間私を夢中にさせた