枚举的常用方法
概述
枚举继承自 java.lang.Enum,天然拥有一些实用方法。
常用方法一览
| 方法 | 说明 |
|---|---|
values() | 获取所有枚举值(编译器生成) |
valueOf(String) | 根据名称获取枚举值 |
ordinal() | 获取枚举值的序号(从 0 开始) |
name() | 获取枚举值的名称字符串 |
compareTo(E) | 与另一个枚举值比较顺序 |
equals(Object) | 比较两个枚举值是否相等 |
hashCode() | 返回哈希码 |
toString() | 返回枚举值的字符串表示 |
代码示例
基本方法
java
public class EnumMethodsDemo {
enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
public static void main(String[] args) {
// values() - 获取所有枚举值
Season[] seasons = Season.values();
for (Season s : seasons) {
System.out.println(s);
}
// valueOf() - 根据名称获取
Season spring = Season.valueOf("SPRING");
System.out.println("Spring: " + spring);
// ordinal() - 序号
System.out.println("Spring ordinal: " + spring.ordinal());
// name()
System.out.println("Name: " + spring.name());
}
}自定义方法
java
public class EnumCustomMethodsDemo {
enum Planet {
MERCURY(0.39), VENUS(0.72), EARTH(1.0),
MARS(1.52), JUPITER(5.2), SATURN(9.58);
private final double distanceFromSun; // AU
Planet(double distance) {
this.distanceFromSun = distance;
}
// 自定义方法
public double getDistance() {
return distanceFromSun;
}
// 静态方法
public static Planet getClosest(double distance) {
for (Planet p : values()) {
if (p.distanceFromSun >= distance) {
return p;
}
}
return SATURN;
}
}
public static void main(String[] args) {
for (Planet p : Planet.values()) {
System.out.printf("%s: %.2f AU%n", p, p.getDistance());
}
System.out.println("Closest to 1.3 AU: " + Planet.getClosest(1.3));
}
}与 String 转换
java
public class EnumStringDemo {
enum Status {
PENDING, APPROVED, REJECTED;
// 从 String 转换(带容错)
public static Status fromString(String value) {
try {
return Status.valueOf(value.toUpperCase());
} catch (IllegalArgumentException e) {
return PENDING;
}
}
}
public static void main(String[] args) {
// valueOf 转换(严格)
Status s1 = Status.valueOf("APPROVED");
System.out.println(s1);
// 自定义转换(容错)
Status s2 = Status.fromString("rejected");
System.out.println(s2);
// toString
System.out.println(s1.toString());
}
}compareTo
java
public class CompareToDemo {
enum Size {
SMALL, MEDIUM, LARGE
}
public static void main(String[] args) {
int result = Size.LARGE.compareTo(Size.SMALL);
System.out.println("LARGE vs SMALL: " + result); // 2
// 按定义顺序比较
System.out.println(Size.MEDIUM.compareTo(Size.LARGE)); // -1
}
}注意事项
values()是编译器生成的,每个枚举类都有valueOf(String)大小写敏感,名称不匹配抛IllegalArgumentExceptionordinal()从 0 开始,但不适合用于业务逻辑(添加枚举值会改变序号)- 建议自定义
fromString()方法,提供容错能力
