我正在考慮使用一個枚舉用這樣的靜態初始化:每次調用靜態枚舉初始化器時是否需要值?
public enum MyEnum{
...
private static HashMap<X, Y> features;
static {
features.put(X, new (Y));
}
...
}
是HashMap中去每次我需要從一個值時重新初始化?
我正在考慮使用一個枚舉用這樣的靜態初始化:每次調用靜態枚舉初始化器時是否需要值?
public enum MyEnum{
...
private static HashMap<X, Y> features;
static {
features.put(X, new (Y));
}
...
}
是HashMap中去每次我需要從一個值時重新初始化?
不,像所有靜態塊一樣,只有在初始化類型時纔會執行。
所以這隻會做一次。
但是,您應該影響地圖的值:您不會在我們看到的代碼中執行此操作。您應該有
private static Map<X, Y> features;
static {
features = new HashMap<X, Y>();
features.put(X, new Y());
}
不,靜態塊只會在類初始化時執行一次。它不會在每次調用時執行檢索。
不,靜態初始值設定項僅在加載類時運行。
不,只是一次。
BTW:Guava ImmutableMap可以幫助:
private static Map<X, Y> features = ImmutableMap.of(X1, Y1, X2, Y2...));
效益:
它之間爲了使t他映射'final'(而不是一個HashMap) –