Ich habe eine ArrayList, die ich per toArray() in einen Array umforme.
Code:
import java.util.*;
public class Main {
public static void main(String[] args) {
ArrayList<String> arraylist = new ArrayList<String>();
arraylist.add("hallo");
arraylist.add("test");
String[] myArray = (String[])arraylist.toArray();
for(int i = 0;i<myArray.length;i++)
System.out.println(myArray[i]);
}
}
Jetzt tritt eine ClassCastException auf:
"[Ljava.lang.Object; cannot be cast to [Ljava.lang.String;"
Wieso kann ich den Rückgabewert Object[] nicht in ein String[] casten ?
die Methode toArray() liefert dir ein Array von Objekten. Das Array von Objekten in ein Array von Strings zu casten geht nicht (wie du siehst). Auf jeden Fall kannst du aber die einzelnen Elemente des Arrays casten (was aber nicht nötig ist):
Code:
ArrayList<String> arraylist = new ArrayList<String>();
arraylist.add("hallo");
arraylist.add("test");
Object[] myArray = arraylist.toArray();
for (int i = 0; i < myArray.length; i++) {
System.out.println((String) myArray[i]);
Da ich diesen Abschnitt in einer Methode habe, die einen String[] zurückgibt habe ich jetzt die zweite Variante implementiert. Die hatte ich auch beim Lesen der API gesehen, aber ich war nicht auf die Idee gekommen direkt einen String[] zu übergeben.
Danke sehr
Dann könntest du evtl. auch die methode so umschreiben, dass die eine List<String> zurückgibt, und sonst überall auch mit Collection hantieren, und die Arrays überhaupt nirgends mehr auftauchen lassen. Sonst nervt diese Array<->Collection Umformerei dauernd.
Gut. Meine Bemerkung ist nur als Warnung gedacht: mir passiert's irgendwie dauernd, dass ich überall mit Arrays anfange, und dann ständig zwischen Collections und Arrays alles hinundherbiegen muss, bis alles zerplatzt und ich am ende alles in Collections umschreibe^^
Gut. Meine Bemerkung ist nur als Warnung gedacht: mir passiert's irgendwie dauernd, dass ich überall mit Arrays anfange, und dann ständig zwischen Collections und Arrays alles hinundherbiegen muss, bis alles zerplatzt und ich am ende alles in Collections umschreibe^^
Das kommt mir dann auch wieder bekannt vor. Funktinoiert momentan aber alles noch ok und solange das der Fall ist, werd ichs auch erstmal so lassen und das Risiko eingehen am Ende evtl doch nochmal alles umschreiben zu müssen. xD