G
DEvent schrieb:
ich frag mich wieso das überhaupt so umständlich nötig ist.
Wieso nicht einfach
List<String> list = new LinkedList<String>();
String[] array = list.toArray();
Das hat mit der Realisierung der Generics in Java zu tun. Man hat da sehr darauf geachtet, möglichst wenig Änderungen am Bytecode und an der JVM machen zu müssen. Deshalb überleben die konkreten Typparameter nicht bis in den Bytecode. (Technisch gesehen vielleicht nicht gerade die optimalste Lösung, aber es existiert nunmal ein riesiger Markt Rund um Java, so dass man da nicht einfach von heute auf morgen alles komplett ändern kann.)
Zumindest weiß die LinkedList zur Laufzeit nicht, von welchem Typ sie genau ist. Das kann sie nur über Reflection herausfinden und dafür braucht man zur Laufzeit etwas, aus dem der Typ hervorgeht. Die Elemente in der Liste können das nicht sein, da die Liste leer sein könnte oder auch nur Elemente eines abgeleiteten Typs beinhalten könnte. Deswegen muss man der entsprechenden Methode eben ein Array des jeweiligen Typs übergeben, das dann entweder genutzt wird, um die Elemente darin zu speichern oder um ein neues Array der gewünschten Größe zu erzeugen, in dem dann gespeichert wird.