枚举

枚举 属于 Java

12 个练习

关于 枚举

_枚举类型_是一种特殊的数据类型,它让变量可以是预先定义好的一组常量中的某一个。变量的值必须等于预先为它定义好的那些值之一。常见的例子包括指南针的方向(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
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 枚举