열거 형 생성자를 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 한정자 로만 선언 할 수 있다는 것 입니다.
'Programing' 카테고리의 다른 글
Java에서 프로그래밍 방식으로 인터페이스의 모든 구현 목록을 얻으려면 어떻게해야합니까? (0) | 2020.11.05 |
---|---|
목록 변환 (0) | 2020.11.05 |
MySQL 데이터베이스 엔진이란 무엇입니까? (0) | 2020.11.05 |
Node.js 웹 서버 내에서 PHP 스크립트 실행 (0) | 2020.11.05 |
인터페이스에 대한 junit 테스트를 작성하는 방법은 무엇입니까? (0) | 2020.11.05 |