2010-02-11 8 views
17

Ich habe mich gefragt, warum die Sortiermethode der Array-Klasse nach einem Parameter vom Typ Object [] fragt. Warum ist der Parameter nicht vom Typ Comparable []? Wenn Sie kein Comparable [] übergeben, wird eine ClassCastException generiert.Warum nimmt Arrays.sort Object [] anstatt Comparable []?

Warum ... public static void sort (Object [] a) und nicht public static void sort (Vergleichbar [] a)? Dank

+0

Sie haben die gleiche Situation an anderen Orten in der Java api, z.B der ObjectOutputStream, der ein Objekt erwartet, das Serializable implementiert. Ich schätze, die Entwickler haben versucht, uns davon abzuhalten, unnötige Casts zu machen. – ZeissS

+0

Damals gab es mehrere Leute, die JDKs implementierten, nicht nur Sun. Implementierungen der Klasse mögen das Vergleichbare gewünscht haben, aber jede deterministische, stabile Sortierung erlaubt haben. (Hypothetisch gesprochen) – Kylar

Antwort

8

Da die zweite Form eine Umverteilung des Arrays erfordern würde. Selbst wenn Sie wissen, dass Ihr Array nur Vergleichswerte enthält, können Sie es nicht einfach in Comparable [] umwandeln, wenn der ursprüngliche Typ Object [] war, da der Array-Typ nicht übereinstimmt.

Object[] arr = new String[0]; 
String[] sarr = (String[]) arr; 

Aber man kann nicht tun:

Sie tun können

Object[] arr = new Object[0]; 
String[] sarr = (String[]) arr; 

So ist es verfrüht Optimierung :)

4

Ansonsten können Sie nicht passieren Object[] in.

+1

@BalusC Gibt es jemals eine Situation, in der Sie eine Reihe von Objekten sortieren würden, von denen Sie nicht wussten, dass sie alle "vergleichbar" implementieren? Jede Verwendung der Sortiermethode erfolgt durch Objekte, die "vergleichbar" sind. Scheint als der einzige Grund für die Annahme von 'Object []' ist, dass 'Object' häufiger verwendet wird und vertrauter ist, und wie ZeissS sagte, sonst müssten wir casten. –

+5

Es gibt immer noch eine Menge 'toArray()' ähnliche Methoden in der Java API, die 'Object []' zurückgeben. – BalusC

+1

Sie könnten 'Comparator ' implementieren, was ähnlich ist, aber nicht dasselbe wie 'Comparable ' – chama

Verwandte Themen