次のようなユーティリティクラスがあります。
public final class MyUtils {
public static final List<String> MY_VALUES = new ArrayList<String>();
{
MY_VALUES.add("foo");
MY_VALUES.add("bar");
}
}
私はこれを次のように別のクラスから呼び出します。
MyUtils.MY_VALUES
そうすると、リストは空になり、デバッグすると、静的ブロックが実行されないことがわかります。
静的クラスの初期化はいつ発生しますか?クラスを強制的に初期化する方法は?ブロックはa static field of the class is assigned
、私がすぐに実行するときに実行する必要があります。また、条件""を満たすために変数を非最終にしようとしましたa non-constant static field is used
。
他の2つの質問とalsで推測されているように、initメソッドを使用できます。静的なコードブロックが実行されないのはなぜですか?しかし、言語仕様の条件を満たしているように見えますが、そもそもなぜ機能しないのかを理解したいと思います。