Este artículo analiza el método de cambiar la lista y la matriz en Java. Compártelo para todos para su referencia. Los detalles son los siguientes:
Hoy escribí el código para encontrar un problema extraño. como sigue:
ArrayList <String> list = new ArrayList <String> ();
Creo que no debería haber ningún problema en la escritura del código de esta manera, y no hay problemas de compilación. Sin embargo, cuando la operación específica se está ejecutando, el informe es anormal, como sigue: excepción en el hilo "principal" java.lang.classcastException: [ljava.lang.object;
Pero no hay problemas para escribir como este:
ArrayList <String> list = new ArrayList <String> (); list.get (i);}
Podemos explicar este fenómeno: Java permite la transformación hacia arriba y hacia abajo, pero si esta transformación es exitosa en función del tipo de este objeto en la máquina virtual Java. La máquina virtual Java guarda el tipo de cada objeto. La matriz también es un objeto. El tipo de matriz [ljava.lang.object. La conversión [ljava.lang.object a [ljava.lang.string es obviamente imposible, porque esta es una transformación hacia abajo, y la máquina virtual solo conserva esta es una matriz de objetos. La matriz es el elemento en la matriz es cadena, por lo que esta transformación no puede tener éxito. Los elementos en la matriz son solo las referencias del elemento, no el elemento específico de almacenamiento, por lo que el tipo de elemento en la matriz todavía se almacena en la máquina virtual Java.
Según la explicación anterior, podemos resumir este problema al siguiente modelo:
Objs objs [] = nuevo objeto [10];
Esto es lo mismo que la compilación anterior. Si modificamos este código, como sigue:
Cadena Strs [] = nueva cadena [10];
Esto se puede compilar y pasar. Entonces podemos atribuir este problema a un problema de una regla de transformación de Java. Hablemos sobre el apoyo de la matriz Java en el modelo.
JDK5 ya tiene soporte para los tipos de modelos, lo que puede garantizar la seguridad de los tipos de datos en la recopilación y el mapa. Personalmente, debería devolver la t [] correspondiente según el modelo. Eche un vistazo más de cerca al código fuente de JDK y encuentre que esa lista tiene dos formas de transformarse en una matriz:
objeto público [] toArray ();
Este método devuelve todos los elementos en la lista a una matriz del mismo tamaño, y todos los elementos de la matriz son de tipo de objeto.
public <t> t [] toArray (t [] a);
Este método devuelve todos los elementos en la lista a una matriz del mismo tamaño, y todos los elementos en la matriz son T de tipo T.
La lista está diseñada porque el compilador Java no nos permite tener nuevas matrices de modelos. Es decir, no puedes definir una matriz como esta:
T arr = new t [tamaño];
Pero puede usar t [] para representar la matriz, y puede convertir la matriz a t []. Por ejemplo, se realiza el público <t> t [] ToArray (t [] a) en la lista:
public <t> t [] toArray (t [] a) {if (a.length <size) a = (t []) java.lang.reflect.array.newinstance (a.getClass (). getComponentType (),, GetComponentType (), tamaño);
Se puede ver en el código anterior que, debido a que no conoce el tipo de esta matriz, debe crear esta matriz a través del mecanismo de reflexión (a.getClass (). GetComponentType () método para obtener un tipo de elemento de matriz).
Al final, la lista se convierte en matriz para manejarlo ::
ArrayList <String> list = new ArrayList <String> ();
Por el contrario, ¿qué pasa si desea convertir la matriz en la lista? como sigue:
Cadena [] S = {"A", "B", "C"};
Se espera que este artículo sea útil para el diseño del programa Java de todos.