跳到主要内容

Java 枚举

枚举是 Java 中的一种特殊的类,它可以用来定义一组有限的常量,每个常量可以表示一个特定的值。

枚举类型的定义方式是通过使用 enum 关键字来定义的,它是一种类型,可以像使用其他类型一样使用枚举。枚举可以定义各种属性和方法,可以像普通类一样定义构造器,实现接口,以及定义任意方法。

枚举类型的变量只能够从其定义的常量集中任选一个,而不能从它的基础数据类型中的任意值中赋值给它,这是因为枚举类型的变量不能够改变它们的值。此外,枚举类型也可以用来替代庞大的 switch 语句,这样可以更加清晰地定义状态和行为。

示例:

// 关于季节的枚举定义(eg: 关于星期、月份的枚举等)
public enum Season {
WINTER, SPRING, SUMMER, FALL
}

与 switch 语句使用对比:


// 使用枚举变量
Season season = Season.SUMMER;

// 使用switch语句
switch (season) {
case WINTER:
System.out.println("It's Winter.");
break;
case SPRING:
System.out.println("It's Spring");
break;
case SUMMER:
System.out.println("It's Summer");
break;
case FALL:
System.out.println("It's Fall");
break;
}

使用 values() 方法遍历枚举:

for (Season s : Season.values()) {
System.out.println(s);
}

使用枚举:

// 像普通类型一样使用
Season season = Season.SUMMER;
System.out.println(season);

// 比较枚举
if (season == Season.SUMMER) { // 如果用equals呢?
System.out.println("It's summer!");
}

注意区分 valueOf()values()values 方法用于返回一个包含枚举值的枚举数组,而 valueOf 方法则是用于根据枚举的名字来返回对应的枚举值:

public enum Season {
Spring, Summer, Autumn, Winter
}

// values方法
Season[] vals = Season.values();
// vals = {Spring, Summer, Autumn, Winter}

// valueOf方法
Season val = Season.valueOf("Summer");
// val = Summer

Java 枚举类型可以继承吗?

枚举类型其实是一种特殊的类,它的实例是固定的,无法被继承。枚举类型的实例使用enum关键字定义,它们在设计的时候是不能被二次修改,所以如果我们希望修改枚举中某个属性的值,是实现不了的。