2016-03-31 8 views
-2

Ich habe versucht, eine TreeMap<Interval, Set<Object>> zum Speichern von Personenentitäten in Alter gruppierten Sets zu generieren, wo die Interval die Grenze der Altersgruppe beschreibt. Ich habe den folgenden Fehler erhalten, als ich das versuchte.Warum wurde Joda Interval nicht vergleichbar gemacht?

java.lang.ClassCastException: org.joda.time.Interval cannot be cast to java.lang.Comparable 

Swapping Interval für eine DateTime funktioniert perfekt, aber der Schlüssel des Karten dann muss als Eingabe verwendet werden, um einen Interval zu erstellen.

Warum wurde Joda Interval nicht vergleichbar gemacht?

+1

Weil es 'Comparable ' nicht implementiert? Was ist deine Frage hier? – CollinD

+1

Schreiben Sie Ihren eigenen Wrapper, der vergleichbare implementiert –

+0

Ja, das ist der technische Grund, aber ich bin mehr nach "warum nicht", da viele der anderen Klassen vergleichbar sind. – ben3000

Antwort

4

Intervalle können auf viele Arten verglichen werden. Das Javadoc von Intervall gibt es explizit an:

Die Dauer wird separat von ReadableDuration dargestellt. Daher sind die Intervalle nicht vergleichbar. Um die Länge von zwei Intervallen zu vergleichen, sollten Sie ihre Dauer vergleichen.

Ein Intervall kann auch in eine ReadablePeriod konvertiert werden.

Für eine längere Erklärung, die folgenden Intervalle und definieren, wie sie bestellt werden sollen:

10:00 - 12:00 
11:00 - 13:00 
11:00 - 12:00 
9:00 - 10:00 
9:00 - 13:00 

Sollten sie nach Dauer (Zeitraum) bestellt werden?

11:00 - 12:00 (1 hours) 
9:00 - 10:00 (1 hours) 
10:00 - 12:00 (2 hours) 
11:00 - 13:00 (2 hours) 
9:00 - 13:00 (4 hours) 

Oder nach Startzeit?

9:00 - 10:00 
9:00 - 13:00 
10:00 - 12:00 
11:00 - 13:00 
11:00 - 12:00 

Oder nach Startzeit, dann Dauer?

9:00 - 10:00 (1 hours) 
9:00 - 13:00 (4 hours) 
10:00 - 12:00 (2 hours) 
11:00 - 12:00 (1 hours) 
11:00 - 13:00 (2 hours) 

Oder durch Endzeit, dann Dauer?

9:00 - 10:00 (1 hours) 
11:00 - 12:00 (1 hours) 
10:00 - 12:00 (2 hours) 
11:00 - 13:00 (2 hours) 
9:00 - 13:00 (4 hours) 

Wie Sie sehen können, gibt es keine einzige klare Definition der „natürlichen Ordnung“, das ist das, was Comparable definiert:

Diese Schnittstelle legt eine totale Ordnung auf die Objekte jeder Klasse, die implementiert es. Diese Reihenfolge wird als die natürliche Reihenfolge der Klasse der Klasse bezeichnet, und die compareTo-Methode der Klasse wird als ihre natürliche Vergleichsmethode bezeichnet.

+0

Pierre, sehr schöne Bezugnahme auf das Javadoc. Hoffe du magst mein Add-on. ;-) – Andreas

+0

Danke, das erklärt das Problem schön. – ben3000

+0

Andreas, OMG du hast alles gemacht. Sie sollten der Besitzer dieser Antwort sein! Danke mein Herr. –