IT story

열거 형에 패키지 전용 생성자가있는 이유는 무엇입니까?

hot-time 2021. 1. 7. 20:00
반응형

열거 형에 패키지 전용 생성자가있는 이유는 무엇입니까?


열거 형 생성자는 상수에 의해서만 호출 될 수 있기 때문에 왜 패키지 전용이 될 수 있습니까?


생성자는 실제로 패키지 전용 이 아닙니다. 키워드를 추가하지 않더라도 private인터페이스 메서드가 암시 적으로 암시 적으로 사용 되는 방식 public입니다.

JLS ( §8.8.3 ) 의 관련 섹션은 다음과 같이 설명합니다.

일반 클래스의 생성자에 대한 액세스 수정자가 지정되지 않은 경우 생성자는 기본 액세스 권한을 갖습니다.

열거 형 유형의 생성자에 대한 액세스 수정자가 지정되지 않은 경우 생성자는 private입니다.

enum 형식 (§8.9)의 생성자가 선언 public되거나 protected.


이것은 언어의 특징입니다. 열거 형 생성자는 암시 적으로 비공개입니다.

흥미롭게도 다음과 같이 패키지 표시 열거 형 생성자를 선언하면 다음과 같습니다.

public enum MyEnum {
    A(0),
    B(1);

    private final int i;

    MyEnum(int i) {
        this.i = i;
    }

    public int getI() {
        return i;
    }
}

패키지의 다른 클래스에서 참조 할 수 없습니다. 시도하면 컴파일러 오류가 발생합니다.

MyEnum 유형을 인스턴스화 할 수 없습니다.

참조 URL : https://stackoverflow.com/questions/7747948/why-can-a-enum-have-a-package-private-constructor

반응형