2012-07-26 63 views
10

Tengo una clase de bean Java Person que contiene 3 variables:Cómo imprimir Java Bean completamente utilizando la reflexión o cualquier otra utilidad

  • nombre (cadena)
  • edad (cadena)
  • dirección (Objeto) .

Address contiene 3 variables:

  • calle
  • door_no
  • ciudad

Me gustaría tener una utilidad que debe imprimir todas las variables en Person.

Con esto quiero decir que debería imprimir Person & también el objeto Address que contiene.

que podría crear un mapa hash y poner los nombres de las variables & valores mediante la reflexión y la tecla de impresión/valor de la interfaz de usuario en JSP, pero el problema es que tengo que aplicar para la reflexión Address añadir la variable/valor en el HashMap.

¿Hay alguna utilidad disponible para hacer esto?

+4

¿No es eso lo que '#toString()' en estos objetos se supone que debe hacer? – Romain

Respuesta

27

Puede usar ToStringBuilder desde Apache Commons.

De la documentación:

Una invocación típica para este método se vería así:

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 

Más detalles:

Esta clase permite a un toString buena y consistente () para ser construido para cualquier clase u objeto. Esta clase tiene como objetivo simplificar el proceso:

permitiendo nombres de los campos de manipulación de todo tipo de manipulación consistentemente nulos matrices dar salida consistente y matrices multidimensionales que permiten el nivel de detalle que ser controlado por objetos y colecciones de manipulación jerarquías de clases para utilizar este escribir el código de clase de la siguiente manera:

public class Person { 
    String name; 
    int age; 
    boolean smoker; 

    ... 

    public String toString() { 
    return new ToStringBuilder(this). 
     append("name", name). 
     append("age", age). 
     append("smoker", smoker). 
     toString(); 
    } 
} 

otra parte, hay un método que utiliza la reflexión para determinar los campos para probar. Como estos campos suelen ser privados, el método reflectionToString usa AccessibleObject.setAccessible para cambiar la visibilidad de los campos . Esto fallará bajo un administrador de seguridad, a menos que los permisos apropiados estén configurados correctamente. También es más lento que las pruebas explícitamente. Una invocación típica para este método se vería así:

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 
+0

Puede usar ToStringBuilder fuera de su método toString. ToStringBuilder.reflectionToString (otherObject) –

+1

puede usar esto: 'ToStringBuilder.reflectionToString (objectRetrieved)' exactamente como Jeff explicó –

+0

@FranciscoSpaeth ¿Qué pasa si tiene una variable de lista? Lista pasatiempos; ¿Cómo puedes configurar eso en String? – Jesse

1

se puede implementar el método de toString de imprimir lo que quiera, o puede utilizar Apache Commons ToStringBuilderhttp://commons.apache.org/lang/api-2.3/org/apache/commons/lang/builder/ToStringBuilder.html y su método reflectionToString. No creo que esto se repita a través de las propiedades (como la dirección, por ejemplo), pero si desea ver la dirección impresa con Street, Door No y City, use implementar su método toString para imprimir esa información.

1

Puede encontrar el Jackson serializador JSON útil para este propósito. La biblioteca de Jackson ya puede ser parte de tu pila. Si no, encuentre las dependencias requeridas a continuación.

private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper(); 
public static String toStringUsingJackson(final Object object) { 
    try { 
     return OBJECT_MAPPER_SINGLETON.writeValueAsString(object); 
    } catch (final JsonProcessingException e) { 
     return String.valueOf(object); 
    } 
} 

Salida de ejemplo:

{ "name": "John Doe", "edad": 42}

obligatorios experto/dependencias Gradle:

  • jackson-core, groupId = com.fasterxml.jackson.core
  • jackson-databind, groupId = com.fasterxml.jackson.core
Cuestiones relacionadas