【Can't resolve symbol エラー】もしかしてそれフィールドだったりしません...?

アホみたいだけどホントの話.

技術書を読んでいて出てくるコードのスニペット(一部分だけを切り出してあるあれね)を動かそうとすることがよくある. で,IDE立ち上げて1,テキトーにパッケージ切って,クラス名はまあMainでいっか,てな具合にMain.java作って...で,写経をし始めると,怒られる.

Can't resolve symbol ~ だとさ.

あれ,このメソッドないんだっけ...?とAPIを確認しにいったり,写経ミスを疑ったりするのだけれども,わからない.

........

で,しばらくして気づいた. あ,public static void main(String[] args)(メインメソッド)の記述忘れて,ここフィールドじゃないすか...orz

ということで,メインメソッドをはじめに書く癖をつけましょう. 自分はMainでクラスを作成するのでメインメソッドも作った気になってしまうのだと思います...

メインメソッドはたいていのIDEで自動補完がサポートされているはずなので,それを使いましょう. IntelliJでは「psvm」と書いてEnterするだけです. ちなみにメインメソッドを自力で書こうとして,例えばString[] argsを忘れるみたいなミスをすると,メインメソッドとして認識されないので,やはり自動補完がオススメです.(←これも経験あり...)

f:id:weekend_warrior:20200922231049p:plain
psvmとタイプするだけでOK(IntelliJの例)


  1. Java9以上なら「JShell使えばいいんじゃね?」という気もするが,ライブラリのパスを通して起動するのもめんどくさかったりするので…