Programing

열거 형 생성자를 Java에서 보호하거나 공개 할 수없는 이유는 무엇입니까?

lottogame 2020. 11. 5. 07:37
반응형

열거 형 생성자를 Java에서 보호하거나 공개 할 수없는 이유는 무엇입니까?


전체 질문은 제목에 있습니다. 예를 들면 :

enum enumTest {

        TYPE1(4.5, "string1"), TYPE2(2.79, "string2");
        double num;
        String st;

        enumTest(double num, String st) {
            this.num = num;
            this.st = st;
        }
    }

생성자는 기본 또는 private수정 자로 괜찮지 만 public또는 protected수정자가 주어지면 컴파일러 오류가 발생합니다 .


Enums를 인스턴스 수가 한정된 클래스로 생각하십시오. 처음 선언 한 인스턴스 외에는 다른 인스턴스가있을 수 없습니다.

따라서 더 많은 인스턴스를 만들 수 있으므로 공용 또는 보호 된 생성자를 가질 수 없습니다.

참고 : 이것은 공식적인 이유가 아닐 수 있습니다. 하지만 enums이런 식 으로 생각하는 것이 가장 합리적입니다 .


생성자를 직접 호출 할 수 없기 때문입니다.

다음은 Enum에 대한 튜토리얼 이 말하는 내용입니다.

참고 : 열거 형 유형의 생성자는 패키지 개인 또는 개인 액세스 여야합니다. enum 본문의 시작 부분에 정의 된 상수를 자동으로 생성합니다. 열거 형 생성자를 직접 호출 할 수 없습니다.


열거 형에는 고정 된 값 집합이 포함되며 컴파일시 모두 알아야합니다. 런타임에 새 리터럴을 만드는 것은 이치에 맞지 않습니다. 생성자가 보이면 가능합니다.


enum은 Java가 고정 된 상수 값을 포함하기 때문입니다. 따라서 enum의 인스턴스를 만들 수 없으므로 public 또는 protected 생성자를 사용할 필요가 없습니다.

또한 내부적으로 enum은 아래와 같이 클래스로 변환됩니다.

enum Color {
 RED, BLUE, YELLOW;
}

내부적으로 다음과 같이 변환됩니다.

public final class Color {
 private Color() {}
 public static final Color RED = new Color();
 public static final Color BLUE = new Color();
 public static final Color YELLOW = new Color();
}

따라서 모든 열거 형 상수는 열거 형 유형의 개체로 표시됩니다. 열거 형 객체를 명시 적으로 만들 수 없으므로 열거 형 생성자를 직접 호출 할 수 없습니다.


기억해야 할 요점은 클래스에 포함되지 않은 enum 은 비 내부 클래스와 마찬가지로 public 또는 default 한정자 로만 선언 할 수 있다는 것 입니다.

참고 URL : https://stackoverflow.com/questions/3664077/why-cant-enum-constructors-be-protected-or-public-in-java

반응형