Hallo lina,
hmmm - das ist eine Überlegung wert. Aber dann muss ich die natürlich bei jeder Verwendung sinnvoll abfangen.
Nein, das sind RuntimeExceptions. Die musst Du nicht abfangen und es ist auch meist nicht sinnvoll. Du fängst ja auch keine ArrayIndexOutOfBoundsException ab, wenn Du weißt, dass die nicht auftreten darf (was eigentlich immer der Fall ist).
Der Comparator kann eben nur bestimmte Objekte vergleichen. Wenn man ihn anders verwendet als spezifiziert, kracht es eben. Der unterschied ist, dass es mit einer RuntimeException kracht und nicht damit, dass irgendwie doch was getan wird, was dann vielleicht irgendwo zu Fehlern führt.
Im übrigen kann man natürlich auch beweisen, dass Deine implementierung der Spezifikation widerspricht ;-)
null ist bei Dir gleich jedem anderen Objekt.
Seien a und b zwei Objekte für die gilt a < b.
Es gilt a = null und b = null. Und folglich a = b was offensichtlich ein Widerspruch ist.
Das gleiche Spielchen kann man natürlich mit Objekten anderen Typs machen. Wenn man also eine Ordnung mit allen Objekten und null definieren will, so müsste man z.B. festelegen: Alle anderen Objekte und null sind untereinander gleich und kleiner als User-Objekte.
Darauf würde dann auch eine Sortierung wieder funktionieren, aber das ist meiner Meinung nach einfach zu umständlich.
Dieses beharren auf die Einhaltung solcher Axiome ist natürlich ein bisschen akademisch, Dein System funktioniert wahrscheinlich auch so. Aber ich finde, man bekommt bessere und übersichtlichere Software, wenn das berücksichtigt.
Grüße
Daniel