argius note

プログラミング関連

static+finalフィールドは定数とは限らない

今回は時系列が逆転しているんですが、ふと思ったのです。
「今まで何故考えなかったのか不思議でならないのですが、static+finalフィールドを無条件に定数とみなしていたけど、良く考えてみたら、プリミティブか不変クラスの値じゃなければ定数じゃないよね。」
で、検索してみました。

なんかstatic final == 定数っていうようなエントリがいくつか見受けられるけど、Monostateで一回だけ初期化して代入すれば良い、Log/Loggerインスタンスのようなstatic finalな変数ってのも当然あると思うんだが。

定数ってのはさらにそれに加えて読み出し専用なものである。途中で内容が変わったり(Mutable)、ログを吐くインタフェースのようなものは定数とは言わないだろう。

static finalであれば定数か?

引用部分以外も含めて参考になりました。
で、何が言いたいのかと言うと、Loggerのフィールド名が大文字になるのが嫌だなーと思っていて、それだけのためにfinal付けないのって、良くないよなー、というジレンマに悩まされていたわけですが、もう決めました。

private static final Logger log = Logger.getLogger(/* any */);