중화사전망 - 자전 검색 - 자바 열거 형의 역할은 무엇입니까?
자바 열거 형의 역할은 무엇입니까?
Sun 에 도입된 새 키워드로 Enum 은 특별한 클래스처럼 보입니다. 또한 자체 변수를 가지고, 자체 메서드를 정의하고, 하나 이상의 인터페이스를 구현할 수 있습니다. 열거 유형을 선언할 때 해당 열거 유형에는 다음과 같은 특징이 있습니다.
1. 클라이언트 코드가 enum 의 새 인스턴스를 만들 수 없도록 하는 공용 생성자를 가질 수 없습니다.
모든 열거 값은 공통적이고 정적이며 최종적입니다. 이는 열거 값에만 적용됩니다. 일반 클래스에서 변수를 정의하는 것처럼 다른 유형의 열거되지 않은 변수를 정의할 수 있으며, 이러한 변수는 원하는 수정자를 사용할 수 있습니다.
3. 기본적으로 enum 은 java.lang.Comparable 인터페이스를 구현합니다.
4.enum 은 toString 메서드를 다시 작성하므로 Color 를 호출하면 됩니다. 기본적으로 문자열 "Blue" 가 반환됩니다.
5.enum 은 toString 메소드에 해당하는 valueOf 메소드를 제공합니다. Valueof ("blue") 를 호출하면 색상이 반환됩니다. 따라서 toString 메서드를 직접 다시 작성할 때 이 점을 염두에 두어야 하며 그에 따라 valueOf 메서드를 다시 작성해야 합니다.
6.enum 은 또한 모든 열거 값을 쉽게 트래버스할 수 있는 values 메소드를 제공합니다.
7.enum 에는 열거 클래스의 열거 값 순서를 반환하는 oridinal 메서드도 있습니다. 이 순서는 열거 값이 선언된 순서에 따라 달라집니다. 여기서 Color 입니다. Red.ordinal () 은 0 을 반환합니다.
이러한 기본 기능을 이해하면 어떻게 사용하는지 살펴보겠습니다.
1. 모든 열거 값을 순회합니다. Values 메서드를 이해하면 ForEach 루프를 사용하여 열거 값을 능숙하게 반복할 수 있습니다.
For(Color c:Color. values ())
System.out.println ("조회 값:"+c ");
2. 열거에서 메소드 및 변수를 정의합니다. 예를 들어, 색상을 임의로 반환하는 방법을 Color 에 추가할 수 있습니다.
공용 열거 색상 {
빨간색,
녹색,
파란색;
개인 정적 int number = Color.values () 입니다. 길이;
공용 정적 색상 getRandomColor(){
Longrandom = system.currenttimemillis ()% number;
스위치 ((int)random ){
시나리오 0:
색상을 반환합니다. 빨간색;
사례 1:
색상을 반환합니다. 녹색;
사례 2:
색상을 반환합니다. 파란색;
기본값: 색상을 반환합니다. 빨간색;
}
}
}
열거 유형에서 변수와 메서드를 정의하는 것은 일반 클래스에서 메서드 및 변수를 정의하는 것과 다르지 않음을 알 수 있습니다. 단, 변수 및 메서드 정의는 모든 열거 값 정의 뒤에 배치해야 합니다. 그렇지 않으면 컴파일러에서 오류를 제공합니다.
3.Override) 메소드의 toString, valueOf.
우리는 이미 enum 이 toString, valueOf 등의 방법을 제공한다는 것을 알고 있으며, 많은 경우 기본 toString 방법을 덮어써야 한다면 enum 을 어떻게 처리해야 할까요? 사실, 이것은 일반 클래스를 덮는 toString 메서드와 다르지 않다.
......
공용 문자열 toString(){
전환 (이) {
빨간색 사례:
색상 으로 돌아갑니다. 빨간색 ";
친환경 사례:
색상 으로 돌아갑니다. 녹색 ";
파란색 케이스:
색상 으로 돌아갑니다. 파란색 ";
기본값:
"알 수 없는 색상" 으로 돌아갑니다.
}
}
......
이 시점에서 이전 순회 코드로 인쇄된 내용을 볼 수 있습니다.
색깔. 빨강
색깔. 그린 (성); 녹색
색깔. 블루
대신
빨강
그린 (성); 녹색
파란색.
ToString 이 실제로 오버로드된 것을 볼 수 있습니다. 일반적으로 toString 을 다시 작성할 때 valueOf 메서드도 다시 작성하여 서로 일관성을 유지해야 합니다.
4. 생성자 사용
Enum 에는 공용 생성자가 있을 수 없지만 enum 내에서 사용할 전용 생성자를 정의할 수 있습니다. 색깔을 예로 들어보죠.
공용 열거 색상 {
빨간색 ("이것은 빨간색입니다"),
녹색 ("이것은 녹색"),
파란색 ("이것은 파란색입니다");
사현 desc;;
색상 (문자열 desc ){
This.desc = desc;
}
공용 문자열 get desc(){
This.desc 를 반환합니다
}
}
여기서는 각 색상에 대한 설명 정보를 제공한 다음 생성자를 정의하여 이 설명 정보를 수락합니다.
생성자는 내부에서만 사용할 수 있고 클라이언트 코드는 열거 값의 인스턴스를 만들 수 없도록 공용 또는 보호될 수 없습니다. 열거 값이 public static final 의 상수라는 것을 알고 있기 때문에 이것은 완전히 합리적입니다.
5. 특정 인터페이스 구현
우리는 이미 enum 이 변수와 메서드를 정의할 수 있다는 것을 알고 있으며, 인터페이스 구현은 일반 클래스 구현과 동일하므로 여기서는 예를 들어 볼 수 없습니다.
6. 사용자 고유의 열거 값을 정의하는 방법입니다.
앞서 살펴본 바와 같이 enum 에 대한 몇 가지 방법을 정의할 수 있습니다. 실제로 각 열거 값에 대한 방법을 정의할 수도 있습니다. 이렇게 하면 이전에 toString 을 다시 작성한 예제를 이렇게 다시 작성할 수 있습니다.
공용 열거 색상 {
빨간색 {
공용 문자열 toString(){
색상 으로 돌아갑니다. 빨간색 ";
}
},
녹색 {
공용 문자열 toString(){
색상 으로 돌아갑니다. 녹색 ";
}
},
파란색 {
공용 문자열 toString(){
색상 으로 돌아갑니다. 파란색 ";
}
}
}
논리적으로 이것은 원래의' 글로벌' toString 방법보다 더 명확하다.
일반적으로 enum 은 새로 정의된 유형으로 프로그래머가 보다 간단하고 이해하기 쉬운 코드를 작성하는 데 도움을 줄 수 있기를 희망합니다.
사람들은 일반적으로 enum 의 일부 고급 기능을 과도하게 사용할 필요가 없다고 생각합니다. 그렇지 않으면 이해하기 쉬운 원래 의도를 위반하게 됩니다.