1

我正在考虑使用带有静态初始化程序的枚举,如下所示:

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

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

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

4

4 回答 4

6

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

所以这只会做一次。

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

private static Map<X, Y> features;

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

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

于 2012-09-11T15:30:16.803 回答
1

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

于 2012-09-11T15:30:39.837 回答
0

不,只有一次。

顺便说一句:番石榴 ImmutableMap可以帮助:

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

益处:

  • 不需要静态块
  • 一行代码
  • ImmutableMap 意味着更安全,如果你只需要一个不可变的 Map
于 2012-09-11T16:20:21.333 回答