자바의 매거진(enum) 유형을 깊이 있게 이야기하다

앞말
여러분의 일상적인 프로그래밍에서 왕왕 이런'데이터 집합'이 존재하는데 그들의 수치는 프로그램에서 안정적이고'데이터 집합'의 요소는 유한하다.예를 들어 월요일부터 일요일까지 7개의 데이터 요소는 일주일의'데이터 집합'을 구성하고 봄, 여름, 가을, 겨울 4개의 데이터 요소는 사계절의'데이터 집합'을 구성한다.자바에서 어떻게 이런 데이터 집합을 더욱 잘 사용할 수 있습니까?그래서 매거진마다 쓸모가 있게 되었다
매거는 사실 하나의 유형이다. int,char와 차이가 많지 않다. 변수를 정의할 때 입력을 제한하는 것이다. 너는 enum에 규정된 값만 부여할 수 있다.
열거 (enum) 구현
JDK5에서 자바 매거 유형의 실현을 제공했는데 새로운 유형이라기보다는 문법 설탕이다.

public enum Season {
 SPRING,
 SUMMER,
 AUTUMN,
 WINTER
}
역컴파일 도구를 통해 이 코드가 어떻게 실현되었는지 보십시오. 역컴파일된 코드는 다음과 같습니다.

public final class Season extends Enum {

 public static Season[] values() {
  return (Season[])$VALUES.clone();
 }

 public static Season valueOf(String s) {
  return (Season)Enum.valueOf(Season, s);
 }

 private Season(String s, int i) {
  super(s, i);
 }

 public static final Season SPRING;
 public static final Season SUMMER;
 public static final Season AUTUMN;
 public static final Season WINTER;
 private static final Season $VALUES[];

 static {
  SPRING = new Season("SPRING", 0);
  SUMMER = new Season("SUMMER", 1);
  AUTUMN = new Season("AUTUMN", 2);
  WINTER = new Season("WINTER", 3);
  $VALUES = (new Season[] {
   SPRING, SUMMER, AUTUMN, WINTER
  });
 }
}
역컴파일된 코드를 통해 다음을 확인할 수 있습니다.
1、Season는 일반적인 종류로 계승Enum되고 final 키워드 수식을 통해 계승되지 않도록 한다.
2. 매거 중SPRING,SUMMER,AUTUMNWINTER류의 정적 실례이며 류구조기Season 방법에서 초기화한다.
3. <clinit> 방법은 사유 변수values()의 사본을 되돌려주고 $VALUES[]$VALUES[] 방법에서 초기화한다.
열거 (enum) 를 사용하는 방법
1. 단일 모드
우리는 이미 클래스 구조기<clinit>가 클래스 불러오는 초기화 단계에서만 실행될 수 있다는 것을 알고 있다. 그래서 매거진 모든 실례는 자바 더미에 있고 사본이 하나밖에 없다. 이런 특성은 매거진으로 하여금 단례 모델을 쉽게 실현할 수 있게 한다. 이것이 바로 Effective 자바 저자인 조쉬 블락이 단리 모델을 실현하는 방식을 제창하는 것이다.

public enum Singleton { INSTANCE;}
2、switch에서 사용
3. 사용자 정의 필드 및 방법
매거 (enum) 에서 기본 필드와 방법을 제외하고 업무 논리에 대한 사용자 정의를 할 수 있습니다.

public enum EnumTest {
 PLUS("+") {
  @Override
  public int bind(int arg1, int arg2) {
   return arg1 + arg2;
  }
 },
 SUB("-") {
  @Override
  public int bind(int arg1, int arg2) {
   return arg1 - arg2;
  }
 };

 final String operation;

 EnumTest(String operation) {
  this.operation = operation;
 }

 abstract int bind(int arg1, int arg2);
}
4. 인터페이스 구현

interface Operation{
 int operate(int arg1, int arg2);
}

public enum EnumTest implements Operation {

 PLUS("+") {
  @Override
  public int operate(int arg1, int arg2) {
   return arg1 + arg2;
  }
 },
 SUB("-") {
  @Override
  public int operate(int arg1, int arg2) {
   return arg1 - arg2;
  }
 };

 final String operation;

 EnumTest(String operation) {
  this.operation = operation;
 }
}
실제 응용 프로그램에서는 "+", "-"를 키로, PLUS 및 SUB<clinit>value에 미리 저장할 수 있으며, 구체적인 사용 방식은 다음과 같다.

Operation operation = hashMap.get("+");
int result = operation.bind(1, 2);
총결산
이상은 자바의 매거 유형에 대한 모든 내용입니다. 본고를 통해 자바의 매거에 대한 소개를 통해 여러분께 도움을 드릴 수 있기를 바랍니다.궁금한 게 있으면 댓글로 얘기해도 돼요.

좋은 웹페이지 즐겨찾기