toArray() Methode einer Collection

-ben-

Mitglied
hy!

wieso krieg ich mit folgendem code eine ClassCastException?

Code:
List list = new ArrayList();
		
list.add( new String( "Hello World" ) );
list.add( new String( "Egal" ) );
		
String[] str = (String[])list.toArray();

ich muss folgenden umweg machen, dann gehts:
Code:
String[] str = (String[])list.toArray( new String[list.size()] );

aber wieso nur? ich kann doch ein Object[] Array zu einem String[] Array casten? oder ned?

danke & gruss
ben
 
tja das ist eine gute Frage:)

list.toArray() gibt anscheinend nur ein reines Object Array zurück. Das kann man natürlich dann nicht in einen String Array casten. Das ist zumindest meine Interpretation:).
 
sj41 hat gesagt.:
list.toArray() gibt anscheinend nur ein reines Object Array zurück.

Nicht nur anscheinend sondern auch tatsächlich. Sowas steht aber auch in der API-Doc drin (die man durchaus lesen darf).

Gruß THMD
 
ja das war mir schon klar:)

public Object[] toArray() gibt aber keine Auskunft darüber was du tatsächlich zurückbekommst (ein Object kann alles mögliche sein).

und im Text steht auch nichts. na ja ist ja auch egal:)
 
Hallo!

So gings unter Java 5:
Code:
 package de.tutorials;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class ListToArrayExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		List<String> names = new ArrayList<String>();
 		names.add("thomas");
 		names.add("richard");
 
 		String[] str = names.<String> toArray(new String[0]);
 	}
 
 }

gruss Tom
 
sj41 hat gesagt.:
public Object[] toArray() gibt aber keine Auskunft darüber was du tatsächlich zurückbekommst (ein Object kann alles mögliche sein).

und im Text steht auch nichts.
Richtig. Es sagt, dass du tatsächlich ein Object[] zurückbekommst. Wenn er ne Prüfung machen würde, ob die Elemente alle den gleichen Typ haben um dann ein entsprechendes Array des Typs zurück zu geben, würde das drinn stehen, aber das steht es wie du schon sagtest nicht.

Aber dafür gibts ja
Code:
public Object[] toArray(Object[] a)

wo das gewünschte Verhalten sogar in der API beschrieben wird.

Und wenn man der API schon nicht glauben will, so sollte spätestens der Compiler mit seiner ClassCastException für Klarheit sorgen.

Gruß
THMD
 
Zurück