2009-03-19 5 views
106

내부 클래스 내부에서 할 수 있기 때문에 주변 클래스의 인스턴스 멤버를 열거 형 내부에서 액세스 할 수 없습니다. 열거 형은 정적이라는 뜻입니까? 주변 클래스의 인스턴스 범위에 액세스 할 수 있습니까? 또는 내가 필요로하는 열거 형 메서드로 인스턴스를 전달해야합니까?자바에서는 enum 유형이 클래스 내부에 정적입니까?

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; 
    } 
} 
+0

나는 당신이 묘사하려는 것을 완전히 이해하고 있는지 확신하지 못합니다. 아마도 작은 코드 샘플을 줄 수 있습니까? – Pete

답변

160

예, 중첩 된 enum은 내재적으로 정적입니다. language specification section 8.9에서

:

중첩 된 열거 형식은 암시 적으로 정적이다. 은 내포 된 열거 형 이 정적이라고 명시 적으로 선언 할 수 있습니다.

44

그것은 인스턴스 수준 (비 정적) 내부 열거 클래스 만들기 위해 이해가되지 것 -

- 열거 인스턴스가 자신이 외부 클래스에 묶여 있다면 그들이 열거 보증을 깰 것을 예 제대로 (액세스 제한을 무시하고, psuedocode) 상수 역할을 열거 값에 대한

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

이 있다면

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

B1 및 B2는 동일한 개체를해야합니다.

관련 문제