1. 배경
Java 언어가 도입되기 전에, 열거 유형을 나타내는 일반적인 패턴은 int 상수 세트를 선언하는 것입니다. 공개 최종 정적 방법을 사용하기 전에 정의하는 데 사용했던 코드는 다음과 같습니다. 1은 봄을 나타내는 데 1을, 2는 여름을 나타내며, 3은 가을을 나타내며, 4는 겨울을 나타냅니다.
공개 수업 시즌 {공개 정적 최종 int 스프링 = 1; 공개 정적 최종 int 여름 = 2; 공개 정적 최종 int 가을 = 3; 공개 정적 최종 int 겨울 = 4;}이 방법을 int 열거 패턴이라고합니다. 그러나이 모델에 무슨 문제가 있습니까? 우리는 그것을 오랫동안 사용해 왔으므로 아무런 문제가 없어야합니다. 일반적으로 우리가 작성하는 코드는 보안, 사용 편의성 및 가독성을 고려합니다. 먼저, 유형 안전을 고려해 봅시다. 물론이 패턴은 유형 안전하지 않습니다. 예를 들어, 봄, 여름, 가을 및 겨울에 특정 가치가 필요한 함수를 설계합니다. 그러나 int 유형의 경우 전달 된 값이 합법적임을 보장 할 수 없습니다. 코드는 다음과 같습니다.
개인 문자열 getChineseseason (int season) {StringBuffer result = new StringBuffer (); 스위치 (시즌) {case season.spring : result.append ( "스프링"); 부서지다; Case Season.summer : result.Append ( "Summer"); 부서지다; Case Season.Autumn : result.Append ( "가을"); 부서지다; Case Season.Winter : result.Append ( "Winter"); 부서지다; 기본값 : result.Append ( "지구의 시즌 없음"); 부서지다; } return result.toString (); } public void dosomething () {system.out.println (this.getchineseseason (season.spring)); // 이것은 정상적인 시나리오 시스템입니다. out.println (this.getchineseseason (5)); // 이것은 불안한 문제로 이어지는 비정상적인 시나리오입니다.이 프로그램 GetChineseseason (Season.Spring)은 우리가 사용할 수있는 방법입니다. 그러나 GetChineseseason (5)은 분명히 그렇지 않으며 편집은 매우 수동적입니다. 우리는 런타임에 어떤 일이 일어나는지 모릅니다. 이것은 분명히 Java 프로그램의 안전성을 준수하지 않습니다.
다음 으로이 패턴의 가독성을 고려해 봅시다. 열거를 사용할 때 대부분의 경우 열거 유형의 문자열 표현식을 얻으려면 편리해야합니다. int 열거 상수를 인쇄하면 우리가 보는 것은 숫자 세트이며, 그다지 유용하지 않습니다. int 상수 대신 문자열 상수를 사용한다고 생각할 수 있습니다. 이 상수에 인쇄 가능한 문자열을 제공하지만 성능 문제가 발생합니다.이 패턴은 또한 우리가 예상하지 못하는 것입니다. 유형 안전 및 프로그램 가독성을 모두 고려하면 Int 및 String 열거 패턴의 단점이 드러납니다. 다행스럽게도 Java 1.5 릴리스 이후, Int 및 String 열거 패턴의 단점을 피하고 많은 추가 이점을 제공하는 또 다른 대안 솔루션이 제안되었습니다. 그것이 열렬한 유형입니다. 다음 장에서는 열거 유형의 정의, 기능, 응용 프로그램 시나리오 및 장점 및 단점을 소개합니다.
2. 정의 <br /> 열거 형 유형은 고정 상수 세트로 구성된 법적 유형을 나타냅니다. Java에서 키워드 열거는 열거 유형을 정의하는 데 사용됩니다. 다음은 Java Enum 유형의 정의입니다.
공개 열거 계절 {봄, 여름, 가을, 와이너;} 3. 기능
열거 유형을 정의하는 Java의 진술은 매우 간단합니다. 다음 특성이 있습니다.
1) 키워드 열거 2) 시즌 3과 같은 유형 이름을 유형으로 사용하십시오.) 봄, 여름, 가을, 겨울 및 위에 정의 된 계절과 같은 허용 값은 파일에 별도로 정의되거나 다른 Java 클래스에 포함될 수 있습니다.
이러한 기본 요구 사항 외에도 사용자는 다른 옵션이 있습니다.
5) 열거는 하나 이상의 인터페이스 (인터페이스)를 구현할 수 있습니다. 6) 새 변수 정의 할 수 있습니다.
4. 응용 프로그램 시나리오
배경에 언급 된 유형 안전을 예로 들어, 해당 코드를 열거 유형으로 다시 작성하십시오. 코드는 다음과 같습니다.
공개 열거 계절 {Spring (1), 여름 (2), 가을 (3), 겨울 (4); 개인 int 코드; 개인 계절 (int code) {this.code = code; } public int getCode () {리턴 코드; }} public class useopice { / ** * 영어 시즌을 중국 시즌으로 변환 * @param season * @return * / public string getchineseseason (시즌 시즌) {StringBuffer result = new StringBuffer (); switch (season) {case spring : result.append ( "[중국어 : 스프링, 열거 상수 상수 :" + season.name () + ", 데이터 :" + season.getCode () + "]"); 부서지다; CASE AULTUMN : result.Append ( "[중국어 : 가을, 열거 상수 상수 :" + season.name () + ", 데이터 :" + season.getCode () + "]"); 부서지다; CASE SUMMER : result.Append ( "[중국어 : 여름, 열거 상수 상수 :" + season.name () + ", 데이터 :" + season.getCode () + "]"); 부서지다; 사례 겨울 : result.Append ( "[중국어 : 겨울, 열거 상수 상수 :" + season.name () + ", 데이터 :" + season.getCode () + "]"); 부서지다; 기본값 : result.Append ( "지구가없는 시즌" + 시즌 .name ()); 부서지다; } return result.toString (); } public void dosomething () {for (시즌 s : season.values ()) {system.out.println (getchineseseason (s)); 이것은 정상적인 시나리오} //system.out.println(5); // 컴파일러가 이미 여기에 실패하여 유형 안전을 보장합니다.} public static void main (string [] arg) {useason useason = new useason (); useason.dosomething (); }}[중국어 : 봄, 열거 상수 : 봄, 데이터 : 1] [중국어 : 여름, 열거 상수 : 여름, 데이터 : 2] [중국어 : 가을, 열거 상수 : 가을, 데이터 : 3] [중국어 : 겨울, 겨울, 데이터 : 4]
여기에 도메인을 열거 유형에 추가하고 싶은 이유는 다음과 같습니다. 목적은 데이터를 상수와 연결하는 것입니다. 예를 들어, 1은 봄을 나타내고 2는 여름을 나타냅니다.
5. 요약
그렇다면 언제 열거를 사용해야합니까? 일주일, 계절 등과 같은 고정 상수 세트가 필요할 때마다 또는 컴파일하기 전에 포함하는 모든 값의 수집. Java 1.5 열거는 대부분의 프로그래머의 요구 사항을 충족 할 수 있으며 간결하고 사용하기 쉬운 특성은 매우 두드러집니다.
6. 사용법
사용 1 : 상수
공개 열거적인 색상 {빨간색, 녹색, 빈, 노란색}사용 2 : 스위치
Enum Signal {Green, Yellow, Red} 공개 클래스 트래픽 조명 {Signal Color = Signal.red; public void change () {switch (color) {case red : color = signal.green; 부서지다; CASE YELLOW : Color = Signal.red; 부서지다; Case Green : Color = Signal.yellow; 부서지다; }}}사용법 3 : 열거에 새 방법을 추가하십시오
public enum color {빨간색 ( "빨간색", 1), 녹색 ( "녹색", 2), blank ( "흰색", 3), 옐로 ( "옐로우", 4); // 멤버 변수 개인 문자열 이름; 개인 INT 인덱스; // 구성 메소드 개인 색상 (문자열 이름, int index) {this.name = name; this.index = index; } // 일반 메소드 public static string getName (int index) {for (color c : color.values ()) {if (c.getIndex () == index) {return c.name; }} return null; } // set method get public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int getIndex () {return index; } public void setIndex (int index) {this.index = index; }}사용 4 : 열거를 덮어 쓰는 방법
public enum color {빨간색 ( "빨간색", 1), 녹색 ( "녹색", 2), blank ( "흰색", 3), 옐로 ( "옐로우", 4); // 멤버 변수 개인 문자열 이름; 개인 INT 인덱스; // 구성 메소드 개인 색상 (문자열 이름, int index) {this.name = name; this.index = index; } // method @override public String toString () {return this.index+"_"+this.name; }}사용 5 : 인터페이스 구현
공개 인터페이스 동작 {void print (); 문자열 getInfo (); } public enum 색상 행동 {빨간색 ( "빨간색", 1), 녹색 ( "녹색", 2), blank ( "흰색", 3), Yello ( "Yellow", 4); // 멤버 변수 개인 문자열 이름; 개인 INT 인덱스; // 구성 메소드 개인 색상 (문자열 이름, int index) {this.name = name; this.index = index; } // 인터페이스 메소드 @override public String getInfo () {return this.name; } // 인터페이스 메소드 @override public void print () {System.out.println (this.index+":"+this.name); }}사용법 6 : 인터페이스를 사용하여 열거를 구성하십시오
공공 인터페이스 음식 {Enum Coffee는 음식 {black_coffee, decaf_coffee, latte, cappuccino} enum dessert를 구현합니다. {과일, 케이크, 젤라토}}위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.