2011-05-07 29 views
5

1) Me pregunto por qué no puedo hacer esto:casting ArrayList <String> a String []

ArrayList<String> entries = new ArrayList<String>(); 
entries.add("entry"); 
String[] myentries = (String[])entries.toArray(); 

¿Qué hay de malo en eso? (Es posible ignorar la segunda línea de código, no es relevante para la cuestión)

2) Sé que mi objetivo se puede alcanzar mediante este código:

ArrayList<String> entries = new ArrayList<String>(); 
entries.add("entry"); 
String[] myentries = new String[entries.size()]; 
myentries = entries.toArray(myentries) 

es esta la forma preferida de la conversión de la ArrayList a una matriz de cuerdas? ¿Hay una forma mejor/más corta?

Muchas gracias :-)

Respuesta

13

El primer ejemplo devuelve un Object[] como la lista no sabe qué tipo de matriz que desea y esto no se puede convertir a un String[]

puede hacer que el segundo un poco más corto con

String[] myentries = entries.toArray(new String[entries.size()]); 
+1

Gracias a todos por sus respuestas, todas son útiles. Encuentro que la redacción de esta respuesta es un poco más clara que las otras. Un pequeño recordatorio para el archivo: puedes convertir desde la subclase a la superclase, pero no al revés. Como Object es una superclase de String, puede convertir de String a Object, pero no al revés. Eso es tan básico que lo olvidas, si no lo usas ;-) –

3

La matriz de respaldo creado por la ArrayList no es una matriz de cadenas, es un conjunto de objetos, y por eso no se puede lanzarlo.

con respecto al caso 2. Esa es la forma común para convertirlo en una matriz, pero puede que sea un poco menos detallado por escrito:

String[] myentries = entries.toArray(new String[entries.size()]); 
2
List<String> list = ...; 
String[] array = list.toArray(new String[list.size()]); 
0

El tipo de entradas se pierde (ya que los genéricos se borran en Java). Por lo tanto, cuando realiza la llamada aArray, solo puede devolver el tipo de objeto, ya que sabe que la lista debe contener objetos. Entonces puedes recuperar un Objeto [] con tus Cuerdas. Si desea tener una matriz de cadenas, debe pasarla al método toArray. Con la conversión no se puede limitar la referencia de la matriz, es decir, no se puede convertir una matriz de objetos en una matriz de cadenas. Pero podrías ir por el camino opuesto, ya que son covariantes.

Cuestiones relacionadas