スポンサーリンク
見たことのないエラーがEcipse+Javaで表示されたのでメモ。
スポンサーリンク
表示されたメッセージ
Javaファイルの編集中に、赤線が引かれ、「Initializer does not complete normally」と表示されました。少しわかりにくい。
原因
原因は、メソッドの中身の始まりと終了を表す「{}」を、2つ連続で書いてしまっていた。
「public void getXxx() {} { ... }」のように、自動入力で追加された「{}」の後に、それに気が付かずに(「()」と見間違えて「{...}」と中身を新しく「{}」を追加して書いてしまっていたようでした。
この「余計な{}」ではなく、続きの「{...}」に赤い波線が引かれていたため、その赤い波線の中に何か問題があるのかと思ってしまいました。
人間の感覚では余計に感じる「{}」も、たしかにそこまでは文法上正しく、そこになぜか続いてしまう、class直下の「{...}」こそ「余計」なので、このように赤線が引かれてしまうのでしょう。
補足
このエラー文中の「Initializer」は、ここではインスタンス初期化子(Instance Initializer)のことを表しています。こんな位置に書かれた「{}」も、あくまでclass直下と言うことで、Instance Initializerとみなされるようです。
今回はその中身が不適切だったわけでエラーが表示されたに過ぎず、中身によってはInitializerとして問題なく、今回のような「二重の中括弧」が見逃されてしまう可能性があります。
スポンサーリンク
スポンサーリンク