MD Blog

誰かの何かに役に立てることを書いていきたいです

[Java] public static final を使わない方がいい理由

public static final で定義した変数は、コンパイル時に呼び出した場所へインライン展開されるから。定数の値を再設定してそのファイルだけを再コンパイルした場合、定数を呼び出す側のファイルは以前の定数を使用したままになる。

private static final で定義した場合 (推奨)

Api.java

private static final int VERSION = 10;

public static int getVersion() {
    return VERSION;
}

Main.java

Integer apiVersion = Api.getVersion();

Main.classをデコンパイル

Integer apiVersion = Integer.valueOf(Api.getVersion());

public static final で定義した場合 (非推奨)

Api.java

public static final int VERSION = 10;

Main.java

Integer apiVersion = Api.VERSION;

Main.classをデコンパイル

Integer apiVersion = Integer.valueOf(10);

Reference