Java 枚举(enum
)是一种特殊的类,用于定义一组常量。枚举提供了一种将一组相关的常量组织在一起的方式,使得代码更加清晰和易于维护。以下是 Java 枚举的用法和典型应用场景:
用法
-
定义枚举:
public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
在这个例子中,
Day
是一个枚举类型,它包含一周的七天作为枚举常量。 -
使用枚举:
Day today = Day.WEDNESDAY; if (today == Day.WEDNESDAY) { System.out.println("It's Wednesday!"); }
-
枚举中的字段和方法:
枚举可以包含字段、构造方法和方法。public enum Planet { MERCURY(3.303e+23, 2.4397e6), VENUS(4.869e+24, 6.0518e6); private final double mass; // in kilograms private final double radius; // in meters Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } private double surfaceGravity() { final double G = 6.67300E-11; return G * mass / (radius * radius); } public double surfaceWeight(double otherMass) { return otherMass * surfaceGravity(); } } public class Test { public static void main(String[] args) { double earthWeight = 70.0; // in kg double mass = earthWeight / Planet.EARTH.surfaceGravity(); // Assume EARTH is defined with appropriate values System.out.println("Your weight on Venus would be " + Planet.VENUS.surfaceWeight(mass)); } }
注意:在这个例子中,我们假设
EARTH
已经被定义,并且需要为EARTH
提供适当的质量和半径。 -
覆盖方法:
枚举可以覆盖 Java 对象的常用方法,比如toString()
。public enum Operation { PLUS { public double apply(double x, double y) { return x + y; } }, MINUS { public double apply(double x, double y) { return x - y; } }, TIMES { public double apply(double x, double y) { return x * y; } }, DIVIDE { public double apply(double x, double y) { return x / y; } }; public abstract double apply(double x, double y); }
场景
-
定义常量集合:
枚举是定义一组常量的方式,比如星期、月份、状态码等。 -
Switch 语句:
枚举常与switch
语句一起使用,使代码更加清晰。Day day = Day.MONDAY; switch (day) { case MONDAY: System.out.println("Start of the work week"); break; case FRIDAY: System.out.println("Last work day of the week"); break; default: System.out.println("Midweek days"); break; }
-
类型安全:
枚举提供了一定程度的类型安全。与使用int
或String
表示一组相关的常量相比,枚举可以防止无效值的出现。 -
实现策略模式:
枚举可以用来实现策略模式,每个枚举常量可以代表一个策略,并实现一个抽象方法。 -
单例模式的有限集合:
在某些情况下,可以使用枚举来实现一组单例对象。
Java 枚举功能强大且灵活,适合在需要定义一组固定常量的场合使用,并可以通过添加字段和方法来增强其功能。