2012-09-11 49 views
1

我正在考慮使用一個枚舉用這樣的靜態初始化:每次調用靜態枚舉初始化器時是否需要值?

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

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

是HashMap中去每次我需要從一個值時重新初始化?

+0

它之間爲了使t他映射'final'(而不是一個HashMap) –

回答

6

不,像所有靜態塊一樣,只有在初始化類型時纔會執行。

所以這隻會做一次。

但是,您應該影響地圖的值:您不會在我們看到的代碼中執行此操作。您應該有

private static Map<X, Y> features; 

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

不,靜態塊只會在類初始化時執行一次。它不會在每次調用時執行檢索。

1

不,靜態初始值設定項僅在加載類時運行。

0

不,只是一次。

BTW:Guava ImmutableMap可以幫助:

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

效益:

  • 沒有必要靜態塊
  • 一行代碼
  • ImmutableMap意味着更安全,如果你只需要一個不變的地圖