Calendar.before(Object when),为什么是Object?

Calendar.before(Object when)的javadoc:

返回此Calendar是否表示指定Object表示的时间之前的时间。 这种方法相当于:

 compareTo(when) < 0 

if和仅当when是Calendar实例时。 否则,该方法返回false。

为什么它接受一个Object,如果有人传递的东西不是Calendar实例,它会返回false? 为什么不接受Calendar实例? 这让我在很长一段时间内都在关注function的不正确结果。

我认为没有特别的理由。 不幸的是, java.util.Calendar有一些我们不得不忍受的设计问题。

请注意,该方法不是final (并且类本身是抽象的)。 随意将其子类化并提供一个将采用Java的Date或JodaTime的LocalDate 。 如果您这样看,那么JDK的作者提供这样的通用解决方案是非常有远见的。

我认为这可能是通过在before()方法中使用多态行为来提供封装。