Java 枚举怎么用?Enum 类型定义和应用详解

文章导读
Previous Quiz Next 在 Java 中,enum(enumeration 的缩写)是一种特殊的 类类型,它允许你定义一组常量(固定值)。它提供了 类型安全(只能赋值预定义的值),并将相关值归入单一类型,使代码更易读和易维护。
📋 目录
  1. 为什么需要 Enum?
  2. 语法
  3. Enum 类方法
  4. Switch 语句中的 Enum
  5. 类内部的 Enum
  6. 类外部的 Enum
  7. 结论
A A

Java - 枚举类



Previous
Quiz
Next

在 Java 中,enum(enumeration 的缩写)是一种特殊的 类类型,它允许你定义一组常量(固定值)。它提供了 类型安全(只能赋值预定义的值),并将相关值归入单一类型,使代码更易读和易维护。

要创建 enum,使用 enum 关键字,并确保常量使用大写字母并用逗号分隔。

为什么需要 Enum?

没有 enum 时,常量通常使用 public static final int 变量定义。但这样做不正确,因为可以赋值任何数字,甚至无效值。Enum 通过将相关常量分组并只允许有效预定义值来解决这个问题。Enum 声明可以在类外部或类内部进行,但不能在方法内部。

不同场景中 enum 优于常量的例子 −

  • 星期几
  • 方向(NORTH, SOUTH, EAST, WEST)
  • 季节(WINTER, SPRING, SUMMER, RAINY)
  • 状态码 (RUN, STOP)

语法

声明 enum 类似于声明 class,但使用 'enum' 关键字代替 'class'。

public enum Day {
   SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}

Enum 类方法

下面是 enum 类的常用方法 −

序号 方法 & 描述
1 int compareTo(E o)

此方法将此 enum 与指定的对象进行顺序比较。

2 boolean equals(Object other)

此方法如果指定的对象与此 enum 常量相等,则返回 true。

3 Class<E> getDeclaringClass()

此方法返回与此 enum 常量的 enum 类型对应的 Class 对象。

4 int hashCode()

此方法返回此 enum 常量的哈希码。

5 String name()

此方法返回此 enum 常量的名称,与其 enum 声明中完全相同。

6 int ordinal()

此方法返回此枚举常量的序数(其在 enum 声明中的位置,初始常量分配序数为零)。

7 String toString()

此方法返回此 enum 常量的名称,如声明中所示。

8 static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

此方法返回指定 enum 类型中具有指定名称的 enum 常量。

下面是 enum 在不同情况下的示例 −

Switch 语句中的 Enum

以下示例展示了 enum 在 ifswitch 语句中的用法。

public class EnumDemo {
   public static void main(String args[]) {
      
      //print an Enum
      System.out.println(Mobile.Motorola);

      Mobile mobile = Mobile.Samsung;
      //Usage in IF statment
      if(mobile == Mobile.Samsung) {
         System.out.println("Matched");
      }
      //Usage in Swith statment
      switch(mobile) {
         case Samsung:
            System.out.println("Samsung");
            break;
         case Nokia:
            System.out.println("Nokia");
            break;
         case Motorola:
            System.out.println("Motorola");
      }
   }
}
enum Mobile {
   Samsung,
   Nokia,
   Motorola
}

编译并运行上述程序,将产生以下 结果

Motorola
Matched
Samsung

类内部的 Enum

以下示例展示了类内部使用 enum 的情况 −

public class TrafficSignal {
    // enum declared inside a class
    enum Light {
        RED, YELLOW, GREEN
    }

    public static void main(String[] args) {
        Light signal = Light.RED;
        System.out.println("Signal is: " + signal);
    }
}

编译并运行上述程序,将产生以下 结果

Signal is: RED

类外部的 Enum

以下示例展示了类外部使用 enum 的用法 −

public class Test {
    public static void main(String[] args) {
        Color c1 = Color.RED;
        System.out.println("Selected color: " + c1);
    }
}

enum Color {
    RED, GREEN, BLUE;
}

让我们编译并运行上述程序。它将产生以下结果

Selected color: RED

结论

在 Java 中,enum 是一种特殊的 class。与使用 new 关键字创建对象的普通 class 不同,enum 会自动创建其对象,这些对象就是常量。

普通 class 可以扩展另一个 class 并具有 public 构造函数,但 enum 总是扩展 java.lang.Enum 且不能被显式扩展,其构造函数是 private 的。虽然 class 用于建模现实世界的实体,如 Car 或 Student,但 enum 用于表示固定的常量集合,例如星期、方向或状态码。