into - java:(String[]) List.toArray() da ClassCastException
pass arraylist to array (2)
El siguiente código (ejecutado en Android) siempre me da una ClassCastException en la tercera línea:
final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();
Ocurre también cuando v2 es el Objeto [0] y también cuando hay Cadenas en él. ¿Alguna idea por qué?
Estás utilizando el incorrecto toArray()
Recuerde que los genéricos de Java son principalmente azúcar sintáctica. Una ArrayList en realidad no sabe que todos sus elementos son cadenas.
Para solucionar su problema, llame a toArray(T[])
. En tu caso,
String[] v3 = v2.toArray(new String[v2.size()]);
Tenga en cuenta que la forma genérica para toArray(T[])
devuelve T[]
, por lo que no es necesario que se toArray(T[])
explícitamente el resultado.
Esto es porque cuando usas
toArray()
devuelve un Objeto [], que no se puede convertir a una Cadena [] (incluso aunque el contenido sea Cadenas) Esto se debe a que el método toArray solo obtiene un
List
y no
List<String>
ya que los genéricos son solo un código fuente, y no están disponibles en el tiempo de ejecución, por lo que no pueden determinar qué tipo de matriz crear.
utilizar
toArray(new String[v2.size()]);
que asigna el tipo correcto de matriz (String [] y del tamaño correcto)