Erste Schritte sort() vs. sort()

ioannis_m

Mitglied
Guten Abend zusammen,

in der util.Arrays Klasse gibt es die
Java:
static void sort (Object[] a)
Methode, wobei es aber vorausgesetzt wird, dass die Elemente Comparable implementieren. Die gleiche Methode in util.Collections
Java:
static <T extends Comparable<? super T>> void sort (List<T> list)
wird mit Hilfe von Generics definiert. Liegt es daran, dass die erste Methode so alt ist, oder gibt es andere Gründe dafür? Soll nicht diese Information gleich aus der Signatur der Methode zu entnehmen sein?

Danke & Gruß
ioannis
 
java.util.Arrays gibt es schon seit Version 1.2 und da waren Generics noch weit davon entfernt implementiert zu sein.
Hätte man wahrscheinlich noch hinzufügen können, aber hat wahrscheinlch keinen interessiert. Oder es wurde nicht gemacht wegen type-erasure oder weil es so und so ein fail-fast verhalten besitzt.
 
Ne, da liegst du falsch. Der Grund ist der, dass Arrays und Generics sich beißen. DH., selbst wenn man es gewollt hätte, ginge es nicht besser.
 
Naja, das Array muss ja Zerlegt werden. Das wird an verschiedenen Stellen unschön hinterher. 😉
 
Mhm. Seh ich jetzt trotzdem keinen Grund das nicht in die Signatur zu schreiben. Hast du dir schonmal Collections::sort angsehen?
Java:
@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
  Object[] a = this.toArray();
  Arrays.sort(a, (Comparator) c);
  ListIterator<E> i = this.listIterator();
  for (Object e : a) {
    i.next();
    i.set((E) e);
  }
}
Da hast du den gleichen Mist mit rawtypes und unchecked.

Wo du das jetzt machst, außerhalb oder innerhalb der Methode ist da schon egal.
 
Ist nicht dokumentiert, aber wenn man sich die Implementierung ansieht dann sieht man es (Cast von Object auf Comparable).
 

Zurück
Oben