2010-09-21 14 views
10

Del javadoc de Calendar.before(Object when):Calendar.before (Object when), why Object?

Devuelve si este calendario representa un tiempo anterior al tiempo representado por el objeto especificado. Este método es equivalente a:

compareTo(when) < 0 

si y solo si es una instancia de Calendar. De lo contrario, el método devuelve falso.

¿Por qué acepta un objeto si, cuando alguien pasa algo que no es una instancia de Calendar, devuelve falso? ¿Por qué no solo aceptar una instancia de Calendar? Esto me mantuvo mirando por resultados incorrectos en una funcionalidad por bastante tiempo.

Respuesta

7

Creo que no hay una razón en particular para eso. java.util.Calendar tiene algunos problemas de diseño con los que tenemos que vivir, desafortunadamente.

+1

+1. Tenga en cuenta que el objeto Date (cuyo diseño emite Calendar debía abordar) tiene un método before que no toma un Object (sino otra Date). No es una API particularmente consistente. – Thilo

+4

Por "vivir con" ¿te refieres a volcar a favor de Joda Time? – ILMTitan

-1

Creo que esto puede proporcionar encapsulación mediante el uso de comportamiento polimórfico en el método before().

1

Tenga en cuenta que el método no es final (y la propia clase es abstracta). Siéntase libre de subclasificarlo y proporcionar una versión que tome el Date de Java o el LocalDate de JodaTime. Si lo ves de esa manera, resulta que fue muy visionario de los autores del JDK para proporcionar una solución tan general.