_枚举类型_是一种特殊的数据类型,它让变量可以是预先定义好的一组常量中的某一个。变量的值必须等于预先为它定义好的那些值之一。常见的例子包括指南针的方向(NORTH、SOUTH、EAST和WEST这些值)以及一周中的每一天。
由于它们是常量,枚举类型中字段的名字都用大写字母。
在 Java 编程语言中,使用 enum 关键字来定义枚举类型。例如,可以这样定义一个表示星期几的枚举类型:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
只要需要表示一组固定的常量,就应该使用枚举类型。这包括像太阳系中的行星这样的自然枚举类型,也包括在编译时就能知道所有可能取值的数据集,比如菜单上的选项、命令行标志等等。
下面这段代码展示了如何使用上面定义的DayOfWeek枚举:
public class Shop {
public String getOpeningHours(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "9am - 5pm";
case SATURDAY:
return "10am - 4pm"
case SUNDAY:
return "Closed.";
}
}
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"
Java 编程语言中的枚举类型比其他语言中的对应类型强大得多。enum声明定义了一个_类_(称为_枚举类型_)。枚举类的主体可以包含方法和其他字段:
public enum Rating {
GREAT(5),
GOOD(4),
OK(3),
BAD(2),
TERRIBLE(1);
private final int numberOfStars;
Rating(int numberOfStars) {
this.numberOfStars = numberOfStars;
}
public int getNumberOfStars() {
return this.numberOfStars;
}
}
在Rating枚举类型的某个成员上调用getNumberOfStars方法:
Rating.GOOD.getNumberOfStars();
// => 4
编译器在创建枚举时会自动添加一些特殊的方法。
例如,枚举类型都有一个静态的values方法,它返回一个数组,其中按声明顺序包含该枚举的所有值:
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
上面的代码片段会打印出以下内容:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
编译器还会添加一个静态的valueOf方法,它根据名称返回对应的枚举成员:
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY