2011-11-11 20 views
7

Estoy tratando de descomprimir una matriz que obtengo al reflejar un campo de objetos. Establecí el valor del campo general en un Objeto. Si se trata de una matriz entonces quiero emitir mi objeto general de una matriz (sea cual sea su tipo) y extraer su contenidoDesempaquetar una matriz usando la reflexión

fields[i].setAccessible(true); 
     String key = fields[i].getName(); 
     Object value = fields[i].get(obj); 

     if (value.getClass().isArray()){ 
      unpackArray(value); 
     } 

En mi método unpackArray, he intentado colar el valor de los objetos a Java.util .Array, java.reflect.Array y Array [] pero cada vez no me deja.

¿Hay alguna manera de convertir mi Objeto en una matriz genérica?

Muchas Gracias Sam

Respuesta

10

La única clase padre de todas las matrices es objeto.

Para extraer los valores de una matriz como Object[] puede usar.

public static Object[] unpack(Object array) { 
    Object[] array2 = new Object[Array.getLength(array)]; 
    for(int i=0;i<array2.length;i++) 
     array2[i] = Array.get(array, i); 
    return array2; 
} 
+0

Gracias tanto, trabaja de forma excelente –

2

matrices Desafortunadamente primitivas y matrices de objetos no tienen una clase de matriz común como ancestro. Entonces, la única opción para desempacar son las matrices primitivas de boxeo. Si cancela las comprobaciones y isArray antes de llamar a este método, puede eliminar algunas de las comprobaciones.

public static Object[] unpack(final Object value) 
{ 
    if(value == null) return null; 
    if(value.getClass().isArray()) 
    { 
     if(value instanceof Object[]) 
     { 
      return (Object[])value; 
     } 
     else // box primitive arrays 
     { 
      final Object[] boxedArray = new Object[Array.getLength(value)]; 
      for(int index=0;index<boxedArray.length;index++) 
      { 
       boxedArray[index] = Array.get(value, index); // automatic boxing 
      } 
      return boxedArray; 
     } 
    } 
    else throw new IllegalArgumentException("Not an array"); 
} 

prueba: http://ideone.com/iHQKY

Cuestiones relacionadas