原文: https://www.programiz.com/java-programming/enums

在本教程中,我们将学习 Java 中的枚举。 我们将在示例的帮助下学习创建和使用枚举和枚举类。

在 Java 中,枚举(枚举的缩写)是一种具有固定的可能值的类型。 我们使用enum关键字声明枚举。 例如,

  1. enum Size {
  2. SMALL, MEDIUM, LARGE, EXTRALARGE
  3. }

在这里,我们创建了一个名为Size的枚举。

花括号内的值称为枚举值(常量)。 这些是枚举类型可以保留的唯一值。

注意:枚举常量通常以大写形式表示。

让我们举一个简单的例子。

  1. enum Size {
  2. SMALL, MEDIUM, LARGE, EXTRALARGE
  3. }
  4. class Main {
  5. public static void main(String[] args) {
  6. System.out.println(Size.SMALL);
  7. System.out.println(Size.MEDIUM);
  8. }
  9. }

输出

  1. SMALL
  2. MEDIUM

从上面的示例可以看出,我们使用枚举名称来访问常量值。

同样,我们可以创建枚举类型的变量。 例如,

  1. Size pizzaSize;

在此,pizzaSizeSize类型的变量。 它只能分配 4 个值。

  1. pizzaSize = Size.SMALL;
  2. pizzaSize = Size.MEDIUM;
  3. pizzaSize = Size.LARGE;
  4. pizzaSize = Size.EXTRALARGE;

示例 1:Java 枚举

  1. enum Size {
  2. SMALL, MEDIUM, LARGE, EXTRALARGE
  3. }
  4. class Test {
  5. Size pizzaSize;
  6. public Test(Size pizzaSize) {
  7. this.pizzaSize = pizzaSize;
  8. }
  9. public void orderPizza() {
  10. switch(pizzaSize) {
  11. case SMALL:
  12. System.out.println("I ordered a small size pizza.");
  13. break;
  14. case MEDIUM:
  15. System.out.println("I ordered a medium size pizza.");
  16. break;
  17. default:
  18. System.out.println("I don't know which one to order.");
  19. break;
  20. }
  21. }
  22. }
  23. class Main {
  24. public static void main(String[] args) {
  25. Test t1 = new Test(Size.MEDIUM);
  26. t1.orderPizza();
  27. }
  28. }

输出

  1. I ordered a medium size pizza.

在上面的程序中,我们创建了一个枚举类型Size。 然后,我们声明了Size类型的变量pizzaSize

变量pizzaSize只能分配 4 个值(SMALLMEDIUMLARGEEXTRALARGE)。

变量pizzaSize分配有MEDIUM常数。 基于此,将打印switch case语句的一种情况。


Java 枚举类

在 Java 中,枚举类型被认为是类的一种特殊类型。 它是在 Java 5 发行版中引入的。

枚举类可以像常规类一样包含方法和字段。

  1. enum Size {
  2. constant1, constant2, …, constantN;
  3. // methods and fields
  4. }

默认情况下,枚举常量始终为public static final

创建枚举类时,编译器还将创建每个枚举常量的实例(对象)。


示例 2:枚举类

  1. enum Size{
  2. SMALL, MEDIUM, LARGE, EXTRALARGE;
  3. public String getSize() {
  4. // this will refer to the object SMALL
  5. switch(this) {
  6. case SMALL:
  7. return "small";
  8. case MEDIUM:
  9. return "medium";
  10. case LARGE:
  11. return "large";
  12. case EXTRALARGE:
  13. return "extra large";
  14. default:
  15. return null;
  16. }
  17. }
  18. public static void main(String[] args) {
  19. // calling the method getSize() using the object SMALL
  20. System.out.println("The size of the pizza is " + Size.SMALL.getSize());
  21. }
  22. }

输出

  1. The size of the pizza is small

在上面的示例中,我们创建了一个枚举类Size。 它具有四个常数SMALLMEDIUMLARGEEXTRALARGE

由于size是一个枚举类,因此编译器会自动为每个枚举常量创建实例。

main()方法内部,我们使用实例SMALL来调用getSize()方法。


像常规类一样,枚举类也可以包含构造器。 要了解更多信息,请访问 Java 枚举构造器


枚举类的方法

枚举类中有一些预定义的方法可以随时使用。

ordinal()方法

ordinal()方法返回枚举常量的位置。 例如,

  1. ordinal(SMALL)
  2. // returns 0

compareTo()方法

compareTo()方法根据序数值比较枚举常量。 例如,

  1. Size.SMALL.compareTo(Size.MEDIUM)
  2. // returns ordinal(SMALL) - ordinal(MEDIUM)

toString()方法

toString()方法返回枚举常量的字符串表示形式。 例如,

  1. SMALL.toString()
  2. // returns "SMALL"

name()方法

name()方法以字符串形式返回枚举常量的定义名称。name()方法返回的值为final。 例如,

  1. name(SMALL)
  2. // returns "SMALL"

valueOf()方法

valueOf()方法采用字符串,并返回具有相同字符串名称的枚举常量。 例如,

  1. Size.valueOf("SMALL")
  2. // returns constant SMALL.

values()方法

values()方法返回一个包含所有枚举常量的枚举类型的数组。 例如,

  1. Size[] enumArray = Size.value();

为什么使用 Java 枚举?

在 Java 中,引入了enum来代替int常量的使用。

假设我们使用了int常量的集合。

  1. class Size {
  2. public final static int SMALL = 1;
  3. public final static int MEDIUM = 2;
  4. public final static int LARGE = 3;
  5. public final static int EXTRALARGE = 4;
  6. }

在这里,如果我们打印常数,就会出现问题。 这是因为仅打印了数字,可能没有帮助。

因此,代替使用int常量,我们可以简单地使用枚举。 例如,

  1. enum Size {
  2. SMALL, MEDIUM, LARGE, EXTRALARGE
  3. }

这使我们的代码更加直观。

同样,枚举提供了编译时类型的安全性。

如果我们声明一个Size类型的变量(如上述示例中所示),则可以确保该变量将容纳四个值之一。 如果我们尝试传递这四个值以外的值,则编译器将生成错误。