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();
También sucede cuando v2 es Object [0] y también cuando hay cadenas en él. ¿Alguna idea de por qué?
java
list
classcastexception
toarray
Gavriel
fuente
fuente
toArray()
método.Respuestas:
Esto se debe a que cuando usa
devuelve un objeto [], que no se puede convertir en una cadena [] (incluso aunque el contenido sea cadenas) Esto se debe a que el método toArray solo obtiene una
y no
ya que los genéricos son solo un código fuente y no están disponibles en tiempo de ejecución, por lo que no pueden determinar qué tipo de matriz crear.
utilizar
que asigna el tipo correcto de matriz (String [] y del tamaño correcto)
fuente
toArray
métodos existían antes de que las clases de colección fueran genéricas.toArray(new String[0])
lugar: "En versiones anteriores de Java, se recomendó el uso de una matriz de tamaño predeterminado, ya que la llamada de reflexión, que es necesaria para crear una matriz del tamaño adecuado, era bastante lenta. Sin embargo, desde las últimas actualizaciones de OpenJDK 6 esta llamada estaba intrinsificada, lo que hace que el rendimiento de la versión de matriz vacía sea el mismo y, a veces, incluso mejor. Además, pasar una matriz de tamaño predeterminado es peligroso para una colección concurrente, ya que es posible una carrera entre la llamadasize
ytoArray
".Estas usando mal
toArray()
Recuerde que los genéricos de Java son en su mayoría azúcar sintáctico. Una ArrayList no sabe realmente que todos sus elementos son cadenas.
Para solucionar su problema, llame
toArray(T[])
. En tu caso,Tenga en cuenta que el formulario genérico
toArray(T[])
regresaT[]
, por lo que el resultado no necesita ser emitido explícitamente.fuente
también hace el truco, tenga en cuenta que ni siquiera necesita lanzar más una vez que se le da el ArrayType correcto al método.
fuente
Úselo así.
fuente