Java中可以限定参数在指定的范围吗?

我封装了一段获取年周的代码

    /**

* 获取指定日期是所在年份的第几周

*

* @param firstDayOfWeek 每周的第一天是星期几(请传入的参数为 Calendar.MONDAY ~ Calendar.SUNDAY)

* @param minimalDaysInFirstWeek 第一周最小为几天

* @param targetDate 目标日期

* @return 指定日期是所在年份的第几周

*/

public static String getWeekOfYear(int firstDayOfWeek, int minimalDaysInFirstWeek, Date targetDate) {

Calendar cal = Calendar.getInstance();

// 设置每周的第一天是星期几

cal.setFirstDayOfWeek(firstDayOfWeek);

// 设置第一周最小为几天

cal.setMinimalDaysInFirstWeek(minimalDaysInFirstWeek);

// 设置目标日期

cal.setTime(targetDate);

return String.valueOf(cal.get(Calendar.WEEK_OF_YEAR));

}

那么我在调用的时候

String weekOfYear = getWeekOfYear(Calendar.MONDAY, 4, targetDay);

可以让第一个参数 firstDayOfWeek 指定为 Calendar.MONDAY ~ Calendar.SUNDAY 吗?
主要就是怕别人在调用的时候,参数里面瞎传值。。。


回答:

一般来说,需要在运行时检查参数的值是否符合要求,如果不符合,就抛出异常

public static String getWeekOfYear(int firstDayOfWeek, int minimalDaysInFirstWeek, Date targetDate) {

if (firstDayOfWeek < Calendar.SUNDAY || firstDayOfWeek > Calendar.SATURDAY) {

throw new IllegalArgumentException("firstDayOfWeek 参数超出范围 [1, 7]");

}

...

}

如果你觉得抛出异常的体验不好,希望编译期做此限制,可以考虑使用枚举

public enum Weekday {

MONDAY(Calendar.MONDAY),

TUESDAY(Calendar.TUESDAY),

WEDNESDAY(Calendar.WEDNESDAY),

THURSDAY(Calendar.THURSDAY),

FRIDAY(Calendar.FRIDAY),

SATURDAY(Calendar.SATURDAY),

SUNDAY(Calendar.SUNDAY);

private int value;

private Weekday(int value) {

this.value = value;

}

public int getValue() {

return value;

}

}

public static String getWeekOfYear(Weekday firstDayOfWeek, int minimalDaysInFirstWeek, Date targetDate) {

...

cal.setFirstDayOfWeek(firstDayOfWeek.getValue())

...

}


回答:

函数定义时可以加上很多参数验证的处理,在验证不通过时可以通过多种机制反馈信息,具体的反馈机制要看需求或者说进行某种约定,比如(不限于下述):

  1. 返回某种错误代码,以标注错误原因,在使用返回值时需要预先判定
  2. 直接抛出某种异常
  3. 在函数过程中进行提示,并返回某种默认的标准值,或者说以对应某种默认值策略进行处理,比如这里如果传参不符合要求,以当天所在周内计数来处理。

以上是 Java中可以限定参数在指定的范围吗? 的全部内容, 来源链接: utcz.com/p/944116.html

回到顶部