是否每次需要值时都会调用静态枚举初始值设定项?

时间:2012-09-11 15:28:59

标签: java hashmap

我正在考虑使用带有静态初始值设定项的枚举:

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

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

每次我需要一个值时,HashMap是否会重新初始化?

4 个答案:

答案 0 :(得分:6)

不,就像所有静态块一样,它只在初始化类型时执行。

所以这只会做一次。

但是你应该影响地图的价值:你不会在我们看到的代码中做到这一点。你应该

private static Map<X, Y> features;

static {
    features = new HashMap<X, Y>();
    features.put(X, new Y());
}

答案 1 :(得分:3)

不,静态块只在类初始化时执行一次。它不会在每次调用时执行。

答案 2 :(得分:1)

不,静态初始化程序仅在加载类时运行。

答案 3 :(得分:0)

不,只是一次。

BTW:Guava ImmutableMap可以提供帮助:

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

好处:

  • 不需要静态阻止
  • 一行代码
  • 如果您只需要一个不可变的Map
  • ,ImmutableMap意味着更安全