1

私は次のような静的初期化子で列挙型を使用することを検討しています:

public enum MyEnum{
    ...
    private static HashMap<X, Y> features;

    static {
        features.put(X, new (Y));
    }
    ...
}

HashMapは、値が必要になるたびに再初期化されますか?

4

4 に答える 4

6

いいえ、すべての静的ブロックと同様に、型が初期化されたときにのみ実行されます。

したがって、これは1回だけ実行されます。

ただし、マップの値に影響を与える必要があります。表示されるコードでは影響を与えません。あなたが持っている必要があります

private static Map<X, Y> features;

static {
    features = new HashMap<X, Y>();
    features.put(X, new Y());
}
于 2012-09-11T15:30:14.307 に答える
3

いいえ、静的ブロックはクラスの初期化中に1回だけ実行されます。取得するたびに実行されるわけではありません。

于 2012-09-11T15:30:16.803 に答える
1

いいえ、静的初期化子は、クラスがロードされたときにのみ実行されます。

于 2012-09-11T15:30:39.837 に答える
0

いいえ、一度だけです。

ところで:Guava ImmutableMapは次のことに役立ちます:

private static Map<X, Y> features = ImmutableMap.of(X1, Y1, X2, Y2...));

利点:

  • 静的ブロックは必要ありません
  • 1行のコード
  • 不変のマップが必要な場合、ImmutableMapはより安全であることを意味します
于 2012-09-11T16:20:21.333 に答える