>Java >java지도 시간 >Java의 enum 사용 소개

Java의 enum 사용 소개

黄舟
黄舟원래의
2017-09-20 10:15:351792검색

이 글은 Java에서 enum의 상세한 사용법에 대한 관련 정보를 주로 소개합니다. Java에서 enum의 사용법을 이해하고 익히는 데 도움이 되기를 바랍니다. 도움이 필요한 친구들은

Java에서 enum을 사용하는 방법을 참고하세요.

enum은 열거형을 의미하며 JDK 1.5에 도입된 새로운 기능이며 java.lang 패키지에 저장됩니다.

다음은 enum 사용 경험과 요약 중 일부입니다.

원래 인터페이스 정의 상수


public interface IConstants {
  String MON = "Mon";
  String TUE = "Tue";
  String WED = "Wed";
  String THU = "Thu";
  String FRI = "Fri";
  String SAT = "Sat";
  String SUN = "Sun";
}

Syntax (Definition)

enum 키워드를 사용해야 하는데, 이는 생성된 유형이 모두 java.lang의 하위 항목임을 의미합니다. .Enum 클래스 클래스(java.lang.Enum은 추상 클래스입니다). 열거형 유형은 일반 패턴 Class Enum


package com.hmw.test;
/**
 * 枚举测试类
 * @author <a href="mailto:hemingwang0902@126.com" rel="external nofollow" rel="external nofollow" >何明旺</a>
 */
public enum EnumTest {
  MON, TUE, WED, THU, FRI, SAT, SUN;
}

을 따릅니다. 이 코드는 실제로 Enum(문자열 이름, int 서수)을 7번 호출합니다.


new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);
  ... ...

순회, 스위치 및 기타 일반적인 작업

순회 및 전환 작업을 위한 샘플 코드:


public class Test {
  public static void main(String[] args) {
    for (EnumTest e : EnumTest.values()) {
      System.out.println(e.toString());
    }

    System.out.println("----------------我是分隔线------------------");

    EnumTest test = EnumTest.TUE;
    switch (test) {
    case MON:
      System.out.println("今天是星期一");
      break;
    case TUE:
      System.out.println("今天是星期二");
      break;
    // ... ...
    default:
      System.out.println(test);
      break;
    }
  }
}

출력 결과:


MON
TUE
WED
THU
FRI
SAT
SUN
----------------我是分隔线------------------
今天是星期二

enum 객체의 일반적인 메서드 소개

int CompareTo(E o)

이 열거형을 지정된 객체와 비교하세요. 주문하다.

Class getDeclaringClass()

이 열거형 상수의 열거형에 해당하는 클래스 객체를 반환합니다.

String name()

열거형 선언에 선언된 대로 이 열거형 상수의 이름을 반환합니다.

int ordinal()

열거형 상수의 서수(초기 상수 서수가 0인 열거형 선언에서의 해당 위치)를 반환합니다.

String toString()

선언에 포함된 열거형 상수의 이름을 반환합니다. ㅋㅋㅋ

출력 결과:


/**
 * Java学习交流QQ群:589809992 我们一起学Java!
 */
public class Test {
  public static void main(String[] args) {
    EnumTest test = EnumTest.TUE;

    //compareTo(E o)
    switch (test.compareTo(EnumTest.MON)) {
    case -1:
      System.out.println("TUE 在 MON 之前");
      break;
    case 1:
      System.out.println("TUE 在 MON 之后");
      break;
    default:
      System.out.println("TUE 与 MON 在同一位置");
      break;
    }

    //getDeclaringClass()
    System.out.println("getDeclaringClass(): " + test.getDeclaringClass().getName());

    //name() 和 toString()
    System.out.println("name(): " + test.name());
    System.out.println("toString(): " + test.toString());

    //ordinal(), 返回值是从 0 开始
    System.out.println("ordinal(): " + test.ordinal());
  }
}

EnumSet, EnumMap 애플리케이션


TUE 在 MON 之后
getDeclaringClass(): com.hmw.test.EnumTest
name(): TUE
toString(): TUE
ordinal(): 1
원리 분석

enum의 구문 구조는 클래스 구문과 다르지만 컴파일러에서 컴파일한 후 생성되는 것은 클래스 파일입니다. 클래스 파일을 디컴파일하면 실제로 java.lang.Enum을 상속받은 클래스가 생성되는 것을 확인할 수 있습니다. EnumTest를 디컴파일한 후(javap com.hmw.test.EnumTest 명령) 얻은 내용은 다음과 같습니다.


package com.hmw.test;

/**
 * 枚举测试类
 * 
 * @author <a href="mailto:hemingwang0902@126.com" rel="external nofollow" rel="external nofollow" >何明旺</a>
 */
public enum EnumTest {
  MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {
    @Override
    public boolean isRest() {
      return true;
    }
  },
  SUN(0) {
    @Override
    public boolean isRest() {
      return true;
    }
  };

  private int value;

  private EnumTest(int value) {
    this.value = value;
  }

  public int getValue() {
    return value;
  }

  public boolean isRest() {
    return false;
  }
}
public class Test {
  public static void main(String[] args) {
    System.out.println("EnumTest.FRI 的 value = " + EnumTest.FRI.getValue());
  }
}

실제로 enum은 클래스이지만 Java 컴파일러는 구문 분석 및 컴파일을 도와줍니다. 그게 다야.


Summary

enum을 일반 클래스로 생각하면 모두 일부 속성과 메서드를 정의할 수 있습니다. 차이점은 enum이 java.lang을 상속했기 때문에 확장 키워드를 사용하여 다른 클래스를 상속할 수 없다는 것입니다. (자바는 단일 상속입니다.)

위 내용은 Java의 enum 사용 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.