为什么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;
}
阅读 8.7k
1 个回答

所以比较Calendar直接用ComparaTo()就好啦
图片描述
DateCalendar是公认的烂。
相同问题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,值不可变,且线程安全,包里主要的类与格式
图片描述
与旧API对应关系
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题