java - resueltos - Iterando sobre matrices por reflexión.
matriz nxn java (4)
Estoy haciendo un trabajo de reflexión y voy a un pequeño problema.
Estoy intentando imprimir objetos en algún árbol de GUI y tengo problemas para detectar matrices de una manera genérica.
Sugerí que:
objeto instanceof Iterable
Haría el trabajo, pero no lo hace (obviamente se aplica solo a Listas y Conjuntos y quien lo implemente).
Entonces, ¿cómo es que reconocería un Array Some Object[]
, O long[]
o Long[]
..?
Gracias
¿Se Object.getClass().isArray()
?
En primer lugar, la respuesta de @Bozho es perfectamente correcta.
Si desea que sea más fácil de utilizar, acabo de crear un método en nuestra pequeña utilidad OSS molindo-utils que convierte una matriz de tipo desconocido en un Iterable: ArrayUtils.toIterable(Object)
De esta manera, puedes hacer:
// any array, e.g. int[], Object[], String[], ...
Object array = ...;
for (Object element : ArrayUtils.toIterable(array)) {
// element of type Integer for int[]
System.out.println(element);
}
Vea README de molindo-utils sobre cómo obtener molindo-utils o siéntase libre de copiar el código si lo desea, como mejor le parezca.
Si no solo desea comprobar si el objeto es una matriz, sino también iterarlo:
if (array.getClass().isArray()) {
int length = Array.getLength(array);
for (int i = 0; i < length; i ++) {
Object arrayElement = Array.get(array, i);
System.out.println(arrayElement);
}
}
(la clase anterior es java.lang.reflect.Array
)
Tu puedes hacer
if (o instanceof Object[]) {
Object[] array = (Object[]) o;
// now access array.length or
// array.getClass().getComponentType()
}