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

时间:2010-09-21 09:33:55

标签: java calendar

来自Calendar.before(Object when)的javadoc:

返回此Calendar是否表示指定Object表示的时间之前的时间。此方法等同于:

compareTo(when) < 0

当且仅当何时是Calendar实例。否则,该方法返回false。

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

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