Java의 내부 클래스에 열거 형을 만들 수없는 이유는 무엇입니까?
내가하려는 것은 다음과 같습니다.
public class History {
public class State {
public enum StateType {
Eclipse는 날이 컴파일 오류를 제공합니다 StateType
: The member enum StateType must be defined inside a static member type
.
State
클래스를 정적으로 만들면 오류가 사라집니다 . State
정적으로 만들 수는 있지만 enum
내부 클래스에서 선언 할 수없는 이유를 이해할 수 없습니다 .
enum
중첩 유형으로 정의 된 유형은 항상 암시 적으로 정의됩니다 static
( JLS §8.9. Enums 참조 ).
비 정적 유형 ( "내부 클래스"라고도 함, JLS §8.1.3. 내부 클래스 및 엔 클로징 인스턴스 참조 ) 내에 정적 중첩 유형을 가질 수 없습니다 .
따라서 enum
비 정적 중첩 유형 내에 내부 유형을 가질 수 없습니다 .
다음과 같이 열거 형을 선언 한 경우 :
enum Suit {SPADES, HEARTS, CLUBS, DIAMONDS}
Java 컴파일러는 다음 클래스를 종합적으로 생성합니다.
final class Suit extends java.lang.Enum<Suit> {
public static final Suit SPADES;
public static final Suit HEARTS;
public static final Suit CLUBS;
public static final Suit DIAMONDS;
private static final Suit[] $VALUES;
public static Suit[] values();
public static Suit valueOf(java.lang.String);
private Suit();
}
(개인 생성자에서 추론 할 수 있듯이) 이미 정의 된 정적 필드 외에이 클래스의 다른 인스턴스를 만들 의도는 없지만 가장 중요한 것은 허용 된 답변에서 언급했듯이 내부 클래스는 정적 멤버를 가질 수 없습니다. ( JLS §8.1.3. Inner Classes and Enclosing Instances ), enum 합성 클래스가 수행하므로 내부 클래스로 허용되지 않습니다.
+ Joachim Sauer의 정보는 이미 충분합니다. 추가 정보를 추가하고 있습니다.
내부 클래스가 정적 중첩 내부 클래스 인 경우에만 내부 열거 형을 정의 할 수 있습니다. 아래 참조
private static class DbResource {
public enum DB {
MERGE_FROM, MERGE_TO, MAIN;
}
}
이것은 내 사용 사례에서 작동했습니다.
public class History {
public interface HConstants{
public enum StateType { PAST,CURRENT,FUTURE}
}
//Inner class
public class State implements HConstants{
public StateType stateField = StateType.PAST;
참조 URL : https://stackoverflow.com/questions/14858036/why-cant-i-create-an-enum-in-an-inner-class-in-java
'programing tip' 카테고리의 다른 글
모든 라디오 버튼을 탭할 수 있습니까? (0) | 2021.01.07 |
---|---|
두 날짜 사이의 모든 날로 구성된 벡터 만들기 (0) | 2021.01.07 |
Node.js 또는 Express.js REST API 문서 생성기 (0) | 2021.01.07 |
"표현식 평가 기의 내부 오류" (0) | 2021.01.07 |
Hackintosh에서 iPhone 개발 (0) | 2021.01.07 |