내부 클래스 내부에서 할 수 있듯이 열거 형 내부에서 주변 클래스의 인스턴스 멤버에 액세스 할 수없는 것 같습니다. 그것은 열거 형이 정적이라는 것을 의미합니까? 주변 클래스의 인스턴스 범위에 대한 액세스 권한이 있습니까? 아니면 인스턴스를 필요로하는 열거 형의 메서드에 전달해야합니까?
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;
}
}
답변
예, 중첩 된 열거 형은 암시 적으로 정적입니다.
로부터 언어 사양 섹션 8.9 :
중첩 된 열거 형은 암시 적으로 정적입니다. 중첩 된 열거 형을 정적으로 명시 적으로 선언하는 것은 허용됩니다.
답변
인스턴스 수준 (비 정적) 내부 열거 형 클래스를 만드는 것은 이치에 맞지 않습니다. 열거 형 인스턴스 자체가 외부 클래스에 연결되어 있다면 열거 형 보장을 깨뜨릴 것입니다.
예를 들면
public class Foo {
private enum Bar {
A, B, C;
}
}
열거 형 값이 상수로 올바르게 작동하려면 (psuedocode, 액세스 제한 무시)
Bar b1 = new Foo().A
Bar b2 = new Foo().A
b1과 b2는 동일한 객체 여야합니다.