rou*_*ble 6 java oop enums design-patterns
是否可以限制方法可以接受的有效枚举值.
比方说,我有一个这样的枚举:
public enum WEEKDAY {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
}
Run Code Online (Sandbox Code Playgroud)
并说我有一个方法只接受这些值的内部集合:
//Here dayOfWeek should only be Monday - Friday.
public void setWorkDayAlarm(WEEKDAY dayOfWeek) {
}
Run Code Online (Sandbox Code Playgroud)
我知道你显然可以打开有效值,在默认情况下不做任何事情.但是在方法的接口中是否有一种方法(或模式),它只接受Java(5+)中有效枚举的某个子集?
我不知道类型系统可以帮助你.这样的事情怎么样?
public enum DayOfWeek {
SUNDAY(false), MONDAY(true), TUESDAY(true), WEDNESDAY(true),
THURSDAY(true), FRIDAY(true), SATURDAY(false);
private final boolean isWeekday;
private DayOfWeek(boolean isWeekday) {
this.isWeekday = isWeekday;
}
public boolean isWeekday() {
return isWeekday;
}
}
Run Code Online (Sandbox Code Playgroud)
然后检查参数:
public void setWorkDayAlarm(DayOfWeek dayOfWeek) {
if (!dayOfWeek.isWeekday())
throw new IllegalArgumentException("Need weekday, got " + dayOfWeek);
// ...
}
Run Code Online (Sandbox Code Playgroud)