더북(TheBook)

해결 방안은 정적 초기화 블록(static initializer)에서 초기화하는 것이다.

public enum Modifier {

    PUBLIC, PRIVATE, PROTECTED, STATIC, FINAL, ABSTRACT;

    private int mask;


    static {

        int maskBit = 1;

        for (Modifier m : Modifier.values()) {

            m.mask = maskBit;

            maskBit *= 2;

        }

    }

    ...

}


열거 상수가 생성되고 나면 정적 변수 초기화와 정적 초기화 블록이 평소처럼 위쪽부터 차례로 실행된다.

Note ≣

클래스 내부에 열거 타입을 중첩할 수도 있다. 이렇게 중첩된 열거는 암시적으로 정적 중첩 클래스가 된다. 따라서 해당 열거 타입의 메서드에서 감싸는 클래스의 인스턴스 변수를 참조할 수 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.