¿Cómo puedo ver en Java si un objeto es una matriz sin usar la reflexión? ¿Y cómo puedo recorrer todos los elementos sin usar la reflexión?
Yo uso Google GWT, así que no puedo usar la reflexión :(
Me encantaría implementar los siguientes métodos sin usar la reflexión:
private boolean isArray(final Object obj) {
//??..
}
private String toString(final Object arrayObject) {
//??..
}
Por cierto: tampoco quiero usar JavaScript de manera que pueda usarlo en entornos que no sean GWT.
java
arrays
gwt
instanceof
edbras
fuente
fuente
obj.getClass().getComponentType()
.Puede utilizar
instanceof
.Operador de comparación de tipos JLS 15.20.2
instanceof
Eso significa que puedes hacer algo como esto:
Habría que comprobar si el objeto es una
instanceof boolean[]
,byte[]
,short[]
,char[]
,int[]
,long[]
,float[]
,double[]
, oObject[]
, si se quiere detectar todos los tipos de matriz.Además, an
int[][]
es aninstanceof Object[]
, por lo que, dependiendo de cómo desee manejar las matrices anidadas, puede complicarse.Para el
toString
,java.util.Arrays
tiene unatoString(int[])
y otras sobrecargas que puede usar. También tienedeepToString(Object[])
para matrices anidadas.Va a ser muy repetitivo (pero incluso
java.util.Arrays
muy repetitivo ), pero así es en Java con matrices.Ver también
fuente
java.util.Arrays
, sí. Veo que has estado leyendo el código al que he vinculado.Se puede acceder a cada elemento de una matriz por separado usando el siguiente código:
Tenga en cuenta que no es necesario saber qué tipo de matriz subyacente es, ya que esto funcionará para cualquier matriz.
fuente
isArray()
ya estaba adecuadamente cubierto en las respuestas publicadas 4 años antes de este.No existe una relación de subtipificación entre matrices de tipo primitivo o entre una matriz de un tipo primitivo y una matriz de un tipo de referencia. Consulte JLS 4.10.3 .
Por lo tanto, lo siguiente es incorrecto como prueba para ver si
obj
es una matriz de algún tipo :Específicamente, no funciona si se
obj
trata de una matriz 1-D de primitivas. (Sin embargo, funciona para matrices primitivas con dimensiones más altas, porque todos los tipos de matrices son subtipos deObject
. Pero es discutible en este caso).La mejor solución (para la
isArray
parte de matriz de la pregunta) depende de lo que se considere "usar la reflexión".En GWT, llamar
obj.getClass().isArray()
no cuenta como usar la reflexión 1 , por lo que es la mejor solución.De lo contrario, la mejor forma de averiguar si un objeto tiene un tipo de matriz es utilizar una secuencia de
instanceof
expresiones.También puede intentar jugar con el nombre de la clase del objeto de la siguiente manera, pero la llamada a
obj.getClass()
está al borde de la reflexión.1 - Más precisamente, el
Class.isArray
método figura como compatible con GWT en esta página .fuente
Puede crear una clase de utilidad para comprobar si la clase representa alguna colección , mapa o matriz
fuente
Simplemente
obj instanceof Object[]
(probado en JShell).fuente