2010-02-04 20 views
24

Estoy haciendo un trabajo de reflexión y voy a un pequeño problema.Iteración de matrices por reflexión

Estoy tratando de imprimir objetos en algún árbol de GUI y tengo problemas detectando matrices de una manera genérica.

me sugirió que:

objeto instanceof Iterable

haría que el trabajo, pero no es así, (obviamente sólo se aplica a las listas y Set y el que lo implementa.)

Entonces, ¿cómo es que reconocería un Array Some Object[], O long[] o Long[] ..?

Gracias

Respuesta

58

Si usted no quiere sólo para comprobar si el objeto es una matriz, sino también para iterar que:

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)

2

Puede hacer

if (o instanceof Object[]) { 
    Object[] array = (Object[]) o; 
    // now access array.length or 
    // array.getClass().getComponentType() 
} 
+0

Esto es bueno, pero no se aplicará a los tipos de matriz primitivos. Creo que encontré la respuesta: object.getClass(). IsArray() .. lol – Roman

5

Qué quiere decir Object.getClass().isArray()?

0

En primer lugar, @ Bozho de la respuesta es perfectamente correcta

Si usted quiere hacer que esto sea más fácil utilizable, que acaba de crear un método en nuestra little OSS utility molindo-utils que convierte una matriz de tipo desconocido en un Iterable: ArrayUtils.toIterable(Object)

esta manera, usted puede 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); 
} 

Consulte README of molindo-utils para obtener molindo-utils o siéntase libre de copiar el código si lo desea, como mejor le parezca.

Cuestiones relacionadas