源码如下,当参数不是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; }
所以比较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,值不可变,且线程安全,包里主要的类与格式
与旧API对应关系