Java - 枚举类
在 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 在 if 和 switch 语句中的用法。
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 用于表示固定的常量集合,例如星期、方向或状态码。