Java에서 클래스 내부의 열거 형은 정적입니까?


123

내부 클래스 내부에서 할 수 있듯이 열거 형 내부에서 주변 클래스의 인스턴스 멤버에 액세스 할 수없는 것 같습니다. 그것은 열거 형이 정적이라는 것을 의미합니까? 주변 클래스의 인스턴스 범위에 대한 액세스 권한이 있습니까? 아니면 인스턴스를 필요로하는 열거 형의 메서드에 전달해야합니까?

public class Universe {
    public final int theAnswer;

    public enum Planet {
        // ...
        EARTH(...);
        // ...

        // ... constructor etc.

        public int deepThought() {
            // -> "No enclosing instance of type 'Universe' is accessible in this scope"
            return Universe.this.theAnswer;
        }
    }

    public Universe(int locallyUniversalAnswer) {
        this.theAnswer = locallyUniversalAnswer;
    }
}

설명하려는 내용을 완전히 이해하고 있는지 잘 모르겠습니다. 아마도 작은 코드 샘플을 줄 수 있습니까?
Pete

답변:


176

예, 중첩 된 열거 형은 암시 적으로 정적입니다.

로부터 언어 사양 섹션 8.9 :

중첩 된 열거 형은 암시 적으로 정적입니다. 중첩 된 열거 형을 정적으로 명시 적으로 선언하는 것은 허용됩니다.


45

인스턴스 수준 (비 정적) 내부 열거 형 클래스를 만드는 것은 이치에 맞지 않습니다. 열거 형 인스턴스 자체가 외부 클래스에 연결되어 있다면 열거 형 보장을 깨뜨릴 것입니다.

예를 들면

public class Foo {
   private enum Bar {
        A, B, C;
   } 
}

열거 형 값이 상수로 올바르게 작동하려면 (psuedocode, 액세스 제한 무시)

Bar b1 = new Foo().A
Bar b2 = new Foo().A

b1과 b2는 동일한 객체 여야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.