Home  >  Article  >  Java  >  Introduction to the use of enum in Java

Introduction to the use of enum in Java

黄舟
黄舟Original
2017-09-20 10:15:351786browse

This article mainly introduces relevant information about the detailed use of enum in java. I hope this article can help everyone understand and master the use of enum in java. Friends in need can refer to it

Detailed explanation of how to use enum in java

The full name of enum is enumeration. It is a new feature introduced in JDK 1.5 and is stored in the java.lang package.

The following are some of my experiences and summaries in using enum.

Original interface definition constant


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)

Create Enumeration types use the enum keyword, which implies that the types created are subclasses of the java.lang.Enum class (java.lang.Enum is an abstract class). The enumeration type conforms to the general pattern 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;
}

This code actually calls Enum(String name, int ordinal) 7 times:


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

Common operations such as traversal and switch

Sample code for traversing and switching enums:


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;
    }
  }
}

Output result:


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

Introduction to common methods of enum objects

int compareTo(E o)


Compares the order of this enumeration with the specified object.

Class getDeclaringClass()


Returns the Class object corresponding to the enumeration type of this enumeration constant.

String name()


Returns the name of this enumeration constant, as declared in its enumeration declaration.

int ordinal()


Returns the ordinal of the enumeration constant (its position in the enumeration declaration where the initial constant ordinal is zero).

String toString()


Returns the name of the enumeration constant, which is contained in the declaration.

static


/**
 * 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());
  }
}

Output result:


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

Give enum custom attributes And method

Add the value attribute and getValue() method to the enum object:


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());
  }
}

Output result:


EnumTest.FRI 的 value = 5

EnumSet, EnumMap application


/**
 * Java学习交流QQ群:589809992 我们一起学Java!
 */
public class Test {
  public static void main(String[] args) {
    // EnumSet的使用
    EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
    for (EnumTest day : weekSet) {
      System.out.println(day);
    }

    // EnumMap的使用
    EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
    weekMap.put(EnumTest.MON, "星期一");
    weekMap.put(EnumTest.TUE, "星期二");
    // ... ...
    for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
      Entry<EnumTest, String> entry = iter.next();
      System.out.println(entry.getKey().name() + ":" + entry.getValue());
    }
  }
}

Principle analysis# Although the syntax structure of ##enum is different from the syntax of class, a class file is generated after being compiled by the compiler. After decompiling the class file, you can see that a class is actually generated, which inherits java.lang.Enum. The content obtained after EnumTest is decompiled (javap com.hmw.test.EnumTest command) is as follows:

public class com.hmw.test.EnumTest extends java.lang.Enum{
  public static final com.hmw.test.EnumTest MON;
  public static final com.hmw.test.EnumTest TUE;
  public static final com.hmw.test.EnumTest WED;
  public static final com.hmw.test.EnumTest THU;
  public static final com.hmw.test.EnumTest FRI;
  public static final com.hmw.test.EnumTest SAT;
  public static final com.hmw.test.EnumTest SUN;
  static {};
  public int getValue();
  public boolean isRest();
  public static com.hmw.test.EnumTest[] values();
  public static com.hmw.test.EnumTest valueOf(java.lang.String);
  com.hmw.test.EnumTest(java.lang.String, int, int, com.hmw.test.EnumTest);
}

So, in fact, enum is a class, but it is compiled by java The processor just does the grammar parsing and compilation for us.

Summary

You can think of enum as an ordinary class. They can all define some properties and methods. The difference is: enum cannot use the extends keyword. Inherit other classes, because enum has inherited java.lang.Enum (java is single inheritance).

The above is the detailed content of Introduction to the use of enum in Java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn