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())
...
}
回答:
函数定义时可以加上很多参数验证的处理,在验证不通过时可以通过多种机制反馈信息,具体的反馈机制要看需求或者说进行某种约定,比如(不限于下述):
- 返回某种错误代码,以标注错误原因,在使用返回值时需要预先判定
- 直接抛出某种异常
- 在函数过程中进行提示,并返回某种默认的标准值,或者说以对应某种默认值策略进行处理,比如这里如果传参不符合要求,以当天所在周内计数来处理。
以上是 Java中可以限定参数在指定的范围吗? 的全部内容, 来源链接: utcz.com/p/944116.html