开发者社区> 问答> 正文

为什么Calendar类的before,after方法的参数是Object类型的?

源码如下,当参数不是Calendar的实例时返回的是false,但请问这样的比较有意义吗?
我个人觉得参数类型是不是不妥?比如我拿Date类型去做比较,不抱任何错,但其实永远返回的都是false。

public boolean before(Object when) {
    return when instanceof Calendar
        && compareTo((Calendar)when) < 0;
}
public boolean after(Object when) {
    return when instanceof Calendar
        && compareTo((Calendar)when) > 0;
}
//我认为这样比较合理
public boolean after(Canlendar when) {
    return compareTo(when) > 0;
}

展开
收起
蛮大人123 2016-03-10 13:44:26 3906 0
2 条回答
写回答
取消 提交回答
  • 因为Calendar类是abstract的,Object做参数类型,可以实现一个继承自Calendar类后,支持任意类型的日期比较。
    2019-07-17 18:57:28
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    所以比较Calendar直接用ComparaTo()就好啦
    Date和Calendar是公认的烂。
    相同问题stackoverflow

    I think there is no particular reason for that. java.util.Calendar has some design issues we have have to live with, unfortunately.
    Java8实现了新的包java.time,值不可变,且线程安全,包里主要的类与格式
    screenshot
    与旧API对应关系
    screenshot

    2019-07-17 18:57:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载