2010-09-21 8 views
10

Z javadoc z Calendar.before(Object when):Calendar.before (Object when), why Object?

Powoduje, czy ten kalendarz reprezentuje czas przed czasem reprezentowanym przez określony obiekt. Ta metoda jest równoważna z:

compareTo(when) < 0 

wtedy i tylko wtedy, gdy jest to instancja kalendarza. W przeciwnym razie metoda zwraca wartość false.

Dlaczego akceptuje obiekt, jeśli ktoś przekazuje coś, co nie jest instancją kalendarza, zwraca wartość false? Dlaczego po prostu nie akceptujesz instancji kalendarza? Pozwoliło mi to od dłuższego czasu obserwować niepoprawne wyniki w funkcjonalności.

Odpowiedz

7

Myślę, że nie ma żadnego szczególnego powodu. java.util.Calendar ma pewne problemy z projektowaniem, z którymi musieliśmy niestety przejść.

+1

+1. Zauważ, że obiekt Date (którego projekt miał sprawiać, że Kalendarz miał adresować) ma wcześniejszą metodę, która nie bierze Obiektu (ale inną Datę). Niezbyt konsekwentny interfejs API. – Thilo

+4

Przez "żyć z" masz na myśli dump na rzecz Joda Time? – ILMTitan

-1

Myślę, że może to być zapewnienie enkapsulacji za pomocą zachowania polimorficznego w metodzie before().

1

Należy zauważyć, że metoda ta nie jest zgodna z final (i samą klasą). Możesz ją podklasować i udostępnić wersję, która zajmie Java Date lub LocalDate JodaTime. Jeśli widzisz to w ten sposób, okazuje się, że autorzy JDK byli bardzo dalekowzroczni w dostarczaniu tak ogólnego rozwiązania.