Java 简化前提条件检查中的if逻辑

Java 简化前提条件检查中的if逻辑,java,logic,Java,Logic,我知道我可以通过使用Guava中的Premissions类或通过提取方法isValidDayOfWeek()临时制作这一点(消除显式抛出)。但这不是我想要的。有没有办法不用switch语句来简化这个逻辑?此检查确保startDayOfWeek是本周的7个值之一 public static TimeSlice getPreviousWeek(Date referenceDate, int startDayOfWeek) { if (!((startDayOfWeek == Calendar.S

我知道我可以通过使用Guava中的Premissions类或通过提取方法
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);
  }
}

一周中这些天的值是有保证的,周日=1,周六=7,因此您只需要:

if (startDayOfWeek < Calendar.SUNDAY || startDayOfWeek > Calendar.SATURDAY)
{
    throw ...;
}
if(startDayOfWeekCalendar.周六)
{
扔。。。;
}
如果您想让它清晰明了,您可以始终使用:

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 ...
    }
}
private static final Set VALID_DAYS=ImmutableSet.of(
日历。周日,日历。周一,日历。周二,
日历。星期三,日历。星期四,日历。星期五,
日历(星期六);
公共静态时间片getPreviousWeek(日期引用日期,int startDayOfWeek)
{
如果(!VALID_DAYS.contains(startDayOfWeek))
{
扔。。。
}
}

(这使用的是’s,但如果您愿意,可以使用其他的。)

一周中这些天的值是有保证的,并且,如果星期日==1,星期六==7,那么您只需要:

if (startDayOfWeek < Calendar.SUNDAY || startDayOfWeek > Calendar.SATURDAY)
{
    throw ...;
}
if(startDayOfWeekCalendar.周六)
{
扔。。。;
}
如果您想让它清晰明了,您可以始终使用:

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 ...
    }
}
private static final Set VALID_DAYS=ImmutableSet.of(
日历。周日,日历。周一,日历。周二,
日历。星期三,日历。星期四,日历。星期五,
日历(星期六);
公共静态时间片getPreviousWeek(日期引用日期,int startDayOfWeek)
{
如果(!VALID_DAYS.contains(startDayOfWeek))
{
扔。。。
}
}
(这是在使用的,但如果您愿意,可以使用其他内容。)

您可以这样做:

if ((startDayOfWeek < Calendar.SUNDAY) || (startDayOfWeek > Calendar.SATURDAY))
if((startDayOfWeekCalendar.周六))
您可以执行以下操作:

if ((startDayOfWeek < Calendar.SUNDAY) || (startDayOfWeek > Calendar.SATURDAY))
if((startDayOfWeekCalendar.周六))

您想要的是类似于{Calendar.SUNDAY…Calendar.SATURDAY}中的startDayOfWeek。不幸的是,Java没有实现基元集。当然,您可以注意到,一周中的几天的值为1..7,只需检查>=SUNDAY的界限,您需要的是类似于
startDayOfWeek的东西在{Calendar.SUNDAY…Calendar.SATURDAY}
中。不幸的是,Java没有实现基元集。当然,您可以注意到,一周中的几天的值为1..7,只需检查>=SUNDAY的界限,我想到了VALID_days选项,但不想这样做。不必要地依赖番石榴来获得简单的食物thing@Pangea:如果你想的话,你可以直接
HashSet
,但我个人会立即添加一个番石榴依赖项,因为“不用动脑筋,没有番石榴就不值得在Java中开发”决定:)我也会开始使用Joda Time来代替java.util.Calendar来处理所有的日期/时间信息……我对整个应用程序有guava依赖性(我猜是从2年开始),但不希望它出现在这个组件上。我想到了VALID_DAYS选项,但不想走这条路。不必要地依赖番石榴来获得简单的食物thing@Pangea:如果你想的话,你可以直接
HashSet
,但我个人会立即添加一个番石榴依赖项,因为“不用动脑筋,没有番石榴就不值得在Java中开发”决定:)我也会开始使用Joda Time来代替java.util.Calendar来处理所有的日期/时间信息……我对整个应用程序有guava依赖性(我猜是从两年开始的),但不希望它出现在这个组件上。