最简单和首选的方法是使用 Java 8 中引入的标准类之一,例如 DayOfWeek。您可以简单地使用它的 plus(days) 方法来移动到接下来的日子,比如
DayOfWeek foo = DayOfWeek.MONDAY.plus(1);//TUESDAY
DayOfWeek bar = DayOfWeek.SUNDAY.plus(1);//MONDAY
但如果你真正的问题是关于其他一些枚举,你可以通过几种方式解决它。
其中一种方法是让每个 Enum 实例存储其 next 实例。我们可以在静态块中设置它们的值,因为所有的枚举值都已经被声明了:
enum Days {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
static{
MONDAY.next = TUESDAY;
TUESDAY.next = WEDNESDAY;
WEDNESDAY.next = THURSDAY;
THURSDAY.next = FRIDAY;
FRIDAY.next = SATURDAY;
SATURDAY.next = SUNDAY;
SUNDAY.next = MONDAY;
}
private Days next;
public Days nextDay() {
return next;
}
}
MONDAY.nextDay() 将返回 TUESDAY。
其他方法可以简单地添加方法,该方法将使用当前枚举的位置来获取下一个元素:
enum Days {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
private static final Days[] VALUES = Days.values(); // store result of values()
// to avoid creating new array
// each time we use values()
public Days nextDay() {
return VALUES[(ordinal() + 1) % 7];
}
}
-
values() 按声明顺序返回当前枚举中所有值的数组
-
ordinal() 返回从 0 开始索引的当前枚举的位置(0-MONDAY、1-TUESDAY 等)。