Упрощение логики if в проверке предварительных условий - PullRequest
0 голосов
/ 03 февраля 2012

Я знаю, что могу импровизировать немного (исключить явный бросок), используя класс Preconditions из Guava или извлекая метод isValidDayOfWeek(). Но это не то, что я ищу. Есть ли способ упростить эту логику без использования оператора switch? Эта проверка удостоверяется, что startDayOfWeek является одним из 7 значений недели.

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);
  }
}

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Значения этих дней недели гарантированы и задокументированы , с SUNDAY == 1 и SATURDAY == 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 ...
    }
}

(Используется Гуава ImmutableSet, но вы можете использовать что-нибудь еще, если хотите.)

1 голос
/ 03 февраля 2012

Вы можете сделать это:

if ((startDayOfWeek < Calendar.SUNDAY) || (startDayOfWeek > Calendar.SATURDAY))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...