corejava11(5.6 枚举类)

5.6 枚举类

您在第3章中看到了如何定义枚举类型。下面是一个典型的例子:

public enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE }

此声明定义的类型实际上是一个类。类正好有四个实例,无法构造新对象。

因此,对于枚举类型的值,不需要使用equals。只需使用==进行比较。

如果愿意,可以向枚举类型添加构造函数、方法和字段。当然,只有在构造枚举常量时才调用构造函数。下面是一个例子:

public enum Size
{
    SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
    private String abbreviation;
    private Size(String abbreviation) { this.abbreviation = abbreviation }
    public String getAbbreviation() { return abbreviation; }
}

枚举的构造函数始终是私有的。可以省略私有修饰符,如前面的示例所示。将枚举构造函数声明为public或protected是一个语法错误。

所有枚举类型都是Enum类的子类。它们从该类继承了许多方法。最有用的是toString,它返回枚举常量的名称。例如,Size.SMALL.toString()返回字符串“SMALL”。

和toString相反是静态valueOf方法。例如,语句

Size s = Enum.valueOf(Size.class, "SMALL");

设置s为Size.SMALL。

每个枚举类型都有一个静态values方法,该方法返回枚举的所有值的数组。例如,调用

Size[] values = Size.values();

返回元素Size.SMALL、Size.MEDIUM、Size.LARGE和Size.EXTRA_LARGE的数组。

ordinal方法在enum声明中生成从零开始计数的枚举常量的位置。例如,Size.MEDIUM.ordinal()返回1。

清单5.12中的简短程序演示了如何使用枚举类型。

注意

Enum类有一个类型参数,为了简单起见,我们忽略了它。例如,枚举类型Size实际上扩展了Enum<Size>。类型参数用于compareTo方法。(我们将在第6章中讨论compareTo方法,在第8章中讨论类型参数。)

清单5.12 enums/EnumTest.java

package enums;

import java.util.*;

/**
 * This program demonstrates enumerated types.
 * @version 1.0 2004-05-24
 * @author Cay Horstmann
 */
public class EnumTest
{  
   public static void main(String[] args)
   {  
      var in = new Scanner(System.in);
      System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
      String input = in.next().toUpperCase();
      Size size = Enum.valueOf(Size.class, input);
      System.out.println("size=" + size);
      System.out.println("abbreviation=" + size.getAbbreviation());
      if (size == Size.EXTRA_LARGE)
         System.out.println("Good job--you paid attention to the _.");      
   }
}

enum Size
{
   SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");

   private Size(String abbreviation) { this.abbreviation = abbreviation; }
   public String getAbbreviation() { return abbreviation; }

   private String abbreviation;
}

java.lang.Enum<E> 5

  • static Enum valueOf(Class enumClass, String name)
    返回具有给定名称的给定类的枚举常量。
  • String toString()
    返回此枚举常量的名称。
  • int ordinal()
    返回enum声明中此枚举常量的从零开始的位置。
  • int compareTo(E other)
    如果此枚举常量位于other之前,则返回负整数;如果this==other,则返回零;否则返回正整数。常量的顺序由enum声明给出。

猜你喜欢

转载自blog.csdn.net/nbda1121440/article/details/90684990