2010-09-21 18 views
10

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

Restituisce se questo calendario rappresenta un tempo prima del tempo rappresentato dall'oggetto specificato. Questo metodo è equivalente a:

compareTo(when) < 0 

se e solo se quando è un'istanza di Calendario. Altrimenti, il metodo restituisce false.

Perché accetta un oggetto se quando qualcuno passa qualcosa che non è un'istanza di Calendar restituisce falso? Perché non accettare semplicemente un'istanza di Calendar? Questo mi ha impedito di guardare per risultati errati in una funzionalità per un bel po 'di tempo.

risposta

7

Penso che non ci sia un motivo particolare per quello. java.util.Calendar ha alcuni problemi di progettazione con cui dobbiamo convivere, sfortunatamente.

+1

+1. Si noti che l'oggetto Date (il cui disegno dovrebbe essere risolto dal calendario) ha un metodo before che non accetta un oggetto (ma un'altra data). Non un'API particolarmente coerente. – Thilo

+4

Per "vivere con" intendi discarica a favore di Joda Time? – ILMTitan

-1

Penso che questo potrebbe essere quello di fornire l'incapsulamento utilizzando il comportamento polimorfico nel metodo before().

1

Si noti che il metodo non è final (e la classe stessa astratta). Sentiti libero di creare una sottoclasse e fornire una versione che utilizzi Java Date o JodaTime LocalDate. Se la vedi in questo modo, risulta che era molto lungimirante per gli autori del JDK fornire una soluzione così generale.

Problemi correlati