2012-02-03 29 views
0

我知道我可以通過使用Guava的Preconditions類或通過提取方法isValidDayOfWeek()即興發揮這一點(消除顯式拋出)。但那不是我想要的。有沒有一種方法可以在不使用switch語句的情況下簡化這種邏輯?此檢查確保startDayOfWeek是本週7個值之一。在先決條件檢查中簡化if邏輯

public static TimeSlice getPreviousWeek(Date referenceDate, int startDayOfWeek) 
{ 
    if (!((startDayOfWeek == Calendar.SUNDAY) || (startDayOfWeek == Calendar.MONDAY) || (startDayOfWeek == Calendar.TUESDAY) 
       || (startDayOfWeek == Calendar.WEDNESDAY) || (startDayOfWeek == Calendar.THURSDAY) 
       || (startDayOfWeek == Calendar.FRIDAY) || (startDayOfWeek == Calendar.SATURDAY))) 
    { 
      throw new IllegalArgumentException("getPreviousWeek(): invalid startDayOfWeek:" + startDayOfWeek); 
    } 
} 
+0

你想要的是像'startDayOfWeek是{Calendar.SUNDAY ... Calendar.SATURDAY}'。不幸的是,Java沒有實現原始集合。 – 2012-02-03 18:01:14

+0

當然,您可以注意到本週的日子[記錄在日曆文檔中](http://docs.oracle.com/javase/1.5.0/docs/api/constant-values.html#java .util.Calendar.SATURDAY)的值爲1..7,只需檢查> = SUNDAY和<= SATURDAY的邊界,但這太過於依賴實現。 – 2012-02-03 18:07:10

回答

3

的一週中那些日子裏的值是保證,documented,與SUNDAY == 1和星期六== 7,所以你只是想:

if (startDayOfWeek < Calendar.SUNDAY || startDayOfWeek > Calendar.SATURDAY) 
{ 
    throw ...; 
} 

如果你想讓它晶瑩剔透,你總是可以使用:

private static final Set<Integer> VALID_DAYS = ImmutableSet.of(
    Calendar.SUNDAY, Calendar.MONDAY, Calendar.TUESDAY, 
    Calendar.WEDNESDAY, Calendar.THURSDAY, Calendar.FRIDAY, 
    Calendar.SATURDAY); 

public static TimeSlice getPreviousWeek(Date referenceDate, int startDayOfWeek) 
{ 
    if (!VALID_DAYS.contains(startDayOfWeek)) 
    { 
     throw ... 
    } 
} 

(這是使用GuavaImmutableSet,但你可以使用的東西,如果你想別的。)

+0

+1簡單不知道爲什麼我不認爲這個;-) – 2012-02-03 18:02:23

+0

我想到了VALID_DAYS選項,但不想去那條路線。對簡單的東西不必要的依賴番石榴 – 2012-02-03 18:08:31

+0

@Pangea:如果你願意,你可以'HashSet' - 但是我個人會立即添加一個Guava依賴作爲一個「毫不費力,不值得在沒有Guava的情況下用Java開發」的決定:)我也開始使用喬達時間所有的日期/時間的東西,而不是java.util.Calendar ... – 2012-02-03 18:09:28

1

你可以這樣做:

if ((startDayOfWeek < Calendar.SUNDAY) || (startDayOfWeek > Calendar.SATURDAY))