2008-11-19 29 views
109

PHP tiene una función var_dump() que genera los contenidos internos de un objeto, mostrando el tipo y el contenido de un objeto.¿Cuál es el equivalente Java de PHP var_dump?

Por ejemplo:

class Person { 
    private $firstName; 
    private $lastName; 

    public function __construct($firstName, $lastName) { 
    $this->firstName = $firstName; 
    $this->lastName = $lastName; 
    } 
} 

$person = new Person('Jon', 'Smith'); 
var_dump($person); 

la Salida:

object(Person)#1 (2) { 
    ["firstName:private"]=> 
    string(3) "Jon" 
    ["lastName:private"]=> 
    string(5) "Smith" 
} 

Cuál es el equivalente en Java que va a hacer lo mismo?

+0

mira esto: http://stackoverflow.com/questions/409784/simplest-way-to-print-an-array-in-java – user2723096

+1

¿Has probado db4o? no es específicamente para esto, pero creo que funcionará perfectamente; –

Respuesta

56

No está tan horneado en Java, por lo que no se obtiene de forma gratuita. Se realiza con convenciones en lugar de construcciones de lenguaje. En todas las clases de transferencia de datos (y tal vez incluso en todas las clases que escriba ...), debe implementar un método sensible toString. Así que aquí debe anular toString() en su clase Person y devolver el estado deseado.

Hay utilities available que ayudan a escribir un buen método toString, o la mayoría de los IDEs tienen un atajo de escritura automático toString().

EDITAR: enlaces muertos - ahora disponible here.

+0

http://commons.apache.org/lang/apidocs/org/apache/commons/lang/builder/ToStringBuilder.html, esto (¿quizás?): Http://commons.apache.org/lang/api-2.5 /org/apache/commons/lang/builder/ToStringBuilder.html –

+0

Vea también http://stackoverflow.com/questions/9444573/using-google-guavas-objects-tostringhelper en la alternativa de Guava e Intellij IDEA template. – Vadzim

14

Sus alternativas son anular el método toString() de su objeto para mostrar sus contenidos de la forma que desee, o utilizar el reflejo para inspeccionar el objeto (de forma similar a lo que hacen los depuradores).

La ventaja de utilizar la reflexión es que no necesitará modificar sus objetos individuales para que sea "analizable", pero existe una complejidad añadida y, si necesita soporte de objetos anidados, tendrá que escribir eso.

Este código mostrará una lista de los campos y sus valores para un Object "o"

Field[] fields = o.getClass().getDeclaredFields(); 
for (int i=0; i<fields.length; i++) 
{ 
    System.out.println(fields[i].getName() + " - " + fields[i].get(o)); 
} 
+0

¿Qué es ese campo que está utilizando, importado de dónde? – RMiranda

+2

java.lang.reflect.Field –

7

El apache commons paquete lang proporciona una clase tal que se puede utilizar para construir una toString() por defecto método que utiliza la reflexión para obtener los valores de los campos. Eche un vistazo al this.

+0

enlace actualizado es http://commons.apache.org/lang/api-release/org/apache/commons/lang/builder/ReflectionToStringBuilder.html –

+0

Ambos enlaces están muertos – beiller

27

En mi experiencia, var_dump se usa normalmente para depurar PHP en lugar de un depurador paso a paso. En Java, puede utilizar su depurador IDE para ver una representación visual de los contenidos de un objeto.

+8

Yups , la mayoría de PHP o Web Developer olvidan la depuración. Porque prefieren ver el resultado de depuración en el navegador. – GusDeCooL

+6

No puede usar el depurador de su IDE si, por ejemplo, está programando su código JSP en el editor basado en el navegador de Adobe Experience Manager. :( – Trevor

0

Usted serialización XML, y usted debe obtener una representación muy clara, incluso de objetos profundamente anidados.

13

Creo que la mejor manera de hacerlo, es a través de Google-GSON (Una biblioteca de Java para convertir JSON a objetos Java y viceversa)

Download, añadir archivo "jar" a su proyecto

HashMap<String, String> map = new HashMap<String, String>(); 

map.put("key_1", "Baku"); 
map.put("key_2", "Azerbaijan"); 
map.put("key_3", "Ali Mamedov"); 

Gson gson = new Gson(); 

System.out.println(gson.toJson(map)); 

salida:

{"key_3":"Ali Mamedov","key_2":"Azerbaijan","key_1":"Baku"} 

Puede convertir cualquier objeto (matrices, listas, etc.) a JSON. Creo, que es el mejor análogo de var_dump de PHP()

+3

Interesante ... ¿sabes por qué no es un método estático? – mirelon

+2

Puedes usarlo como un método estático: new Gson(). ToJson (...) sin crear nuevas variables. –

2

me gusta usar GSON porque a menudo ya una dependencia del tipo de proyectos que estoy trabajando:

public static String getDump(Object o) { 
    return new GsonBuilder().setPrettyPrinting().create().toJson(o); 
} 

O sustituye GSON por cualquier otra biblioteca JSON que uses.

Cuestiones relacionadas