2010-09-21 4 views
10

Depuis le javadoc de Calendar.before(Object when):Calendar.before (Objet quand), pourquoi Object?

Renvoie si ce calendrier représente une heure avant l'heure représentée par l'objet spécifié. Cette méthode est équivalente à:

compareTo(when) < 0 

si et seulement si une instance de calendrier est utilisée. Sinon, la méthode renvoie false.

Pourquoi accepte-t-il un objet si, lorsque quelqu'un passe quelque chose qui n'est pas une instance de Calendar, il renvoie false? Pourquoi ne pas simplement accepter une instance de calendrier? Cela m'a permis de regarder des résultats incorrects dans une fonctionnalité pendant un certain temps.

Répondre

7

Je pense qu'il n'y a pas de raison particulière à cela. java.util.Calendar a des problèmes de conception avec lesquels nous devons malheureusement vivre.

+1

+1. Notez que l'objet Date (dont les problèmes de conception étaient censés adresser le calendrier) a une méthode before qui ne prend pas un objet (mais une autre date). Pas une API particulièrement cohérente. – Thilo

+4

Par "vivre avec" voulez-vous dire décharge en faveur de Joda Time? – ILMTitan

-1

Je pense que cela peut être de fournir l'encapsulation en utilisant un comportement polymorphique dans la méthode before().

1

Notez que la méthode n'est pas final (et la classe elle-même abstraite). N'hésitez pas à le sous-classer et fournir une version qui prendra Java Date ou LocalDate de JodaTime. Si vous voyez cela de cette façon, il s'avère que c'était très clairvoyant de la part des auteurs du JDK de fournir une telle solution générale.

Questions connexes