我一直在从事一个项目,在我的private static class MyDateEvaluator
中,有一个已弃用的api,即getDate()
。
这是我的第一个代码:
@Override
public boolean isInvalid(Date date) {
return date.getDay() == 0;
}
然后我尝试将其更改为Calendar.get(Calendar.DAY_OF_MONTH)
,但是它不起作用,并且出现错误消息,
MyDateEvaluator不是抽象的。
public boolean isInvalid(Calendar Calendar) {
return 0 == Calendar.get(Calendar.DAY_OF_MONTH);
}
答案 0 :(得分:1)
我建议:
Set<DayOfWeek> invalidDays = EnumSet.of(DayOfWeek.SUNDAY);
@Override
public boolean isInvalid(Date date) {
// First convert to a modern type
ZonedDateTime zdt = date.toInstant().atZone(ZoneId.systemDefault());
DayOfWeek dow = zdt.getDayOfWeek();
return invalidDays.contains(dow);
}
如果您可以完全避免使用老式的Date
类,那就更好了。我假设方法签名位于您不能更改的接口或超类中。如果是这样,则该参数确实必须具有类型Date
,我们不能用LocalDate
替代(也不能像您尝试的那样用Calendar
替代)。
Date
和Calendar
的设计均较差且已过时。因此,当我们得到Date
时,我们可以做的最好的事情就是将其转换为Instant
并从那里执行任何进一步的转换。我的代码取决于JVM的默认时区,这是不稳定的,因为可以随时更改设置。但是,由于Date
类的不良设计,我们无法避免这种情况。
比上述方法更简单并且可能足够好的一个方法是声明DayOfWeek invalidDay = DayOfWeek.SUNDAY;
而不是集合,并使用.equals
进行比较。
答案 1 :(得分:0)
尝试一下
@Override
public boolean isInvalid(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return 0 == c.get(Calendar.DAY_OF_WEEK);
}