作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在开发一个项目,在我的私有(private)静态类 MyDateEvaluator
中,有一个已弃用的 api,即 getDate()
。
这是我的第一个代码:
@Override
public boolean isInvalid(Date date) {
return date.getDay() == 0;
}
然后我尝试将其更改为 Calendar.get(Calendar.DAY_OF_MONTH)
,但它不起作用,并且收到一条错误消息,
MyDateEvaluator is not abstract.
public boolean isInvalid(Calendar Calendar) {
return 0 == Calendar.get(Calendar.DAY_OF_MONTH);
}
最佳答案
我建议:
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
那就更好了完全上课。我假设方法签名位于您无法更改的接口(interface)或父类(super class)中。如果是这样,则该参数确实需要具有类型 Date
,我们不能用 LocalDate
代替(也不如您尝试的那样使用 Calendar
)。
两者Date
和Calendar
设计不佳且早已过时。因此,当我们得到 Date
时,我们能做的最好的事情就是是将其转换为Instant
并从那里执行任何进一步的转换。我的代码依赖于 JVM 的默认时区,该时区不稳定,因为该设置可以随时更改。然而,考虑到Date
的糟糕设计类我们没有办法避免这种情况。
一个比上面简单一点并且可能足够好的选项是声明 DayOfWeek invalidDay = DayOfWeek.SUNDAY;
而不是使用 .equals
进行设置和比较.
关于java - 如何修复已弃用的 .getDate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746188/
我是一名优秀的程序员,十分优秀!