在Java中,枚举(Enum)类型用于表示固定数量的常量值。它们通常用于表示一组相关的值,例如一周的天数、月份、颜色等。枚举类型提供了一种类型安全的方式来限制变量的值。
以下是一个简单的枚举类型的示例,表示一周的七天:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
你可以像这样使用枚举:
Day day = Day.MONDAY;
switch (day) {
case MONDAY:
System.out.println("Mondays are hard.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
// You can have case statements for the other days as well
default:
System.out.println("Midweek days are so-so.");
break;
}
枚举类型还可以有构造函数、方法和字段。例如,假设你有一个表示月份的枚举,每个月份都有一个特定的天数:
public enum Month {
JANUARY(31),
FEBRUARY(28),
MARCH(31),
APRIL(30),
MAY(31),
JUNE(30),
JULY(31),
AUGUST(31),
SEPTEMBER(30),
OCTOBER(31),
NOVEMBER(30),
DECEMBER(31);
private final int days;
Month(int days) {
this.days = days;
}
public int getDays() {
return days;
}
}
然后,你可以像这样使用它:
Month month = Month.FEBRUARY;
System.out.println("February has " + month.getDays() + " days.");
这将输出 “February has 28 days.”。
在Java中,枚举类型可以用于更复杂的场景,例如实现设计模式(如单例模式、策略模式)或作为状态机的一部分。
以下是一个使用枚举实现的单例模式的例子:
public enum Singleton {
INSTANCE;
public void execute (String arg) {
// perform operation here
}
}
然后,你可以像这样使用它:
Singleton singleton = Singleton.INSTANCE;
singleton.execute("Do something");
在这个例子中,枚举类型确保了单例的全局访问点,并且由于枚举类型的特性,这个单例是线程安全的。
另一个复杂的使用场景是实现策略模式。假设你有一个应用程序,它可以以多种不同的方式进行排序,你可以使用枚举来实现这些不同的排序策略:
public enum SortStrategy {
ASCENDING {
public void sort(int[] array) {
Arrays.sort(array);
}
},
DESCENDING {
public void sort(int[] array) {
Arrays.sort(array);
int length = array.length;
for (int i = 0; i < length / 2; i++) {
int temp = array[i];
array[i] = array[length - 1 - i];
array[length - 1 - i] = temp;
}
}
};
public abstract void sort(int[] array);
}
然后,你可以像这样使用它:
int[] array = {
3, 1, 4, 1, 5, 9};
SortStrategy strategy = SortStrategy.DESCENDING;
strategy.sort(array);
System.out.println(Arrays.toString(array));
这将按降序排序数组并打印结果。