2012-09-11 3 views
1

는이 같은 정적 초기화로 열거를 사용하는 것을 고려하고있다 :값이 필요할 때마다 정적 enum initializer가 호출됩니까?

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

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

HashMap의 내가 그것을에서 값을 필요로 할 때마다 다시 초기화 될 것입니다?

+0

그 사이에 t 그는 HashMap이 아닌'final'을 맵핑합니다. –

답변

6

아니요, 모든 정적 블록과 마찬가지로 형식을 초기화 할 때만 실행됩니다.

이렇게 한 번만 수행됩니다.

하지만지도에 대한 가치에 영향을 주어야합니다. Google에서 보는 코드에서는 그렇지 않습니다. 당신은 있어야합니다

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는 안전 의미 당신은 불변의지도를 필요로하는 경우
관련 문제