2011-09-02 20 views
8

he definido List<Integer> stack = new ArrayList<Integer>(); List list toArray in Java- ¿Por qué no puedo convertir una lista de "Integer" en una matriz "Integer"?

Cuando estoy tratando de convertirlo en una matriz de la siguiente manera:

Integer[] array= stack.toArray(); 

me sale esta excepción:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object[] to Integer[]. 

¿Por qué? Es exactamente del mismo tipo: entero a entero. No es como en este caso genérico cuando las clases son father-and-son relation

Traté de hacer la colada:

Integer[] array= (Integer[]) stack.toArray(); 

Pero aquí me sale este error:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 

¿Cuál es el problema?

Respuesta

11

Debido a la supresión de tipo, ArrayList no conoce su tipo genérico en tiempo de ejecución, por lo que solo puede proporcionarle el objeto más general []. Debe usar the other toArray method, que le permite especificar el tipo de matriz que desea.

Integer[] array= stack.toArray(new Integer[stack.size()]); 
1

hacer esto en su lugar:

Integer[] array = stack.toArray(new Integer[stack.size()]); 

Tenemos que pasar la matriz "semilla" como argumento para el método toArray.

2

La manera de hacerlo es la siguiente:

Integer[] array = stack.toArray(new Integer[stack.size()]); 

Para el registro, la razón de que el código no compila no es simplemente tipo de borrado. El problema es que List<T>.toArray() devuelve Object[] y lo ha hecho antes de que se introdujeran los genéricos.

Cuestiones relacionadas