Java 枚举类型
上次修改时间:2024 年 3 月 6 日
在本文中,我们将展示如何在 Java 中使用枚举类型。
枚举类型 是 Java 内置的数据类型,它定义了一组固定的命名常量。常量集之后不能更改。具有枚举类型的变量可以被赋值为任何枚举器作为值。
与使用像整数这样的原始数据类型相比,枚举类型提供了一种更健壮和可读的方式来处理常量值。枚举通过保证变量只能保存预定义的值之一来强制执行类型安全。
任何时候我们需要表示一组固定的常量时,我们都应该使用枚举类型。有许多自然的枚举类型,例如我们太阳系中的行星、季节或星期几。这些是我们在编译时就知道所有可能值的数据集。
public enum Size {
SMALL, MEDIUM, LARGE
}
我们使用 enum 关键字来定义 Java 中的枚举。用大写字母命名常量是一种良好的编程实践。
简单示例
我们有一个包含枚举的简单代码示例。
enum Day {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
void main() {
Day day = Day.MONDAY;
if (day == Day.MONDAY) {
System.out.println("It is Monday");
}
System.out.println(day);
for (Day d : Day.values()) {
System.out.println(d);
}
}
我们定义了 Day 枚举,它表示一组固定的七个日期名称。
enum Day {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
枚举类型是使用 enum 关键字创建的。按照惯例,常量用大写字母书写。
Day day = Day.MONDAY;
我们有一个名为 day 的变量,它的枚举类型为 Day。它被初始化为 Day.Monday。
for (Day d : Day.values()) {
System.out.println(d);
}
此循环将所有日期打印到控制台。values 方法返回一个数组,其中包含此枚举类型的常量,按声明的顺序排列。此方法可用于使用增强型 for 语句迭代常量。增强型 for 遍历数组,逐个元素,并将它们打印到终端。
$ java Main.java It is Monday MONDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY
为枚举常量提供值
我们可以显式地为枚举常量提供一些值。
enum Season {
SPRING(10),
SUMMER(20),
AUTUMN(30),
WINTER(40);
private int value;
private Season(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
void main() {
for (Season season : Season.values()) {
System.out.println(STR."\{season} \{season.getValue()}");
}
}
该示例包含一个具有四个常量的 Season 枚举。
SPRING(10), SUMMER(20), AUTUMN(30), WINTER(40);
这里我们定义了枚举的四个常量。常量被赋予特定的值。
$ java Main.java SPRING 10 SUMMER 20 AUTUMN 30 WINTER 40
掷硬币
枚举是一种类类型。我们可以定义自己的方法。
import java.util.Random;
public enum Coin {
HEADS,
TAILS;
public static Coin toss() {
var rand = new Random();
int rdx = rand.nextInt(Coin.values().length);
return Coin.values()[rdx];
}
}
void main() {
for (int i = 1; i <= 15; i++) {
System.out.print(STR."\{Coin.toss()} ");
}
}
该示例定义了 toss 方法,该方法随机选择一个常量:HEADS 或 TAILS。稍后在 for 循环中,我们调用 toss 十五次。
$ java Main.java HEADS TAILS HEADS TAILS HEADS HEADS TAILS HEADS HEADS HEADS TAILS TAILS HEADS TAILS TAILS
带有 switch 表达式的枚举类型
枚举可以有效地与 switch 表达式一起使用。
import java.util.Random;
void main() {
Season season = Season.randomSeason();
String msg = switch (season) {
case Season.SPRING -> "Spring";
case Season.SUMMER -> "Summer";
case Season.AUTUMN -> "Autumn";
case Season.WINTER -> "Winter";
};
System.out.println(msg);
}
enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER;
public static Season randomSeason() {
var random = new Random();
int ridx = random.nextInt(Season.values().length);
return Season.values()[ridx];
}
}
我们定义一个 Season 枚举。枚举包含一个 randomSeason 方法,该方法随机创建一个 Season 值。根据选择的值,我们打印一条消息。
var msg = switch (season) {
case Season.Spring -> "Spring";
case Season.Summer -> "Summer";
case Season.Autumn -> "Autumn";
case Season.Winter -> "Winter";
};
System.out.println(msg);
我们根据 switch 表达式检查该值。该表达式返回枚举的字符串表示形式。由于编译器预先知道所有可能的常量,因此 switch 表达式是详尽的,也就是说,我们不必定义 default 分支。
来源
在本文中,我们使用了 Java 中的枚举。
作者
列出所有Java教程。