tipos que programacion guardar ejemplo declarar datos concepto como bidimensional arreglo array java casting

java - guardar - que es un array en programacion



lanzando una matriz de objetos a un error de matriz Integer (5)

No puede convertir una matriz de Object en una matriz de Integer . Tienes que recorrer todos los elementos de a y lanzar cada uno individualmente.

Object[] a = new Object[1]; Integer b=1; a[0]=b; Integer[] c = new Integer[a.length]; for(int i = 0; i < a.length; i++) { c[i] = (Integer) a[i]; }

Editar: creo que la razón detrás de esta restricción es que, al realizar un casting, la JVM quiere garantizar la seguridad de tipo en el tiempo de ejecución. Como una matriz de Objects puede ser cualquier cosa además de los Integers , la JVM tendría que hacer lo que el código anterior está haciendo de todos modos (observe cada elemento individualmente). Los diseñadores de idiomas decidieron que no querían que la JVM hiciera eso (no estoy seguro de por qué, pero estoy seguro de que es una buena razón).

Sin embargo, puede convertir una matriz de subtipos en una matriz de supertipos (por ejemplo, Integer[] a Object[] )!

¿Qué pasa con el siguiente código?

Object[] a = new Object[1]; Integer b=1; a[0]=b; Integer[] c = (Integer[]) a;

El código tiene el siguiente error en la última línea:

Excepción en el hilo "main" java.lang.ClassCastException: [Ljava.lang.Object; no se puede convertir a [Ljava.lang.Integer;


O haz lo siguiente:

... Integer[] integerArray = new Integer[integerList.size()]; integerList.toArray(integerArray); return integerArray; }


Ross, también puedes usar Arrays.copyof () o Arrays.copyOfRange ().

Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class); Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);

Aquí la razón para golpear una ClassCastException es que no puede tratar una matriz de Integer como una matriz de Object . Integer[] es un subtipo de Object[] pero Object[] no es un Integer[] .

Y lo siguiente tampoco dará una ClassCastException .

Object[] a = new Integer[1]; Integer b=1; a[0]=b; Integer[] c = (Integer[]) a;


java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

intentas lanzar un Array of Object para convertirlo en Array of Integer. No puedes hacerlo Este tipo de downcast no está permitido.

Puede hacer una matriz de Entero, y luego copiar cada valor de la primera matriz en una segunda matriz.


Cuando el casting se realiza en Java, el compilador de Java y el tiempo de ejecución de Java comprueban si el casting es posible o no y arroja errores en caso de que no lo sea.

Cuando se trata de la fundición de tipos de objeto, la instanceof prueba debe pasar para que la tarea se ejecute. En tu ejemplo, resulta
Object[] a = new Object[1]; boolean isIntegerArr = a instanceof Integer[]
Si haces un sysout de la línea anterior, devolvería falso;
Así que probar una instancia de verificación antes de lanzar ayudaría. Entonces, para corregir el error, puede agregar el cheque de ''instancia''
O
use la siguiente línea de código:
(Arrays.asList(a)).toArray(c);

Tenga en cuenta que el código anterior fallaría si la matriz de Objetos contiene alguna entrada que no sea Integer.