web-dev-qa-db-fra.com

Qu'est-ce que Java équivalent de PHP var_dump?

PHP a une fonction var_dump () qui affiche le contenu interne d'un objet, affichant le type et le contenu d'un objet.

Par exemple:

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);

affichera:

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

Quel est l'équivalent dans Java qui fera la même chose?

118
Jon Cram

Ce n'est pas tout à fait aussi bien intégré en Java, donc vous ne l'obtenez pas gratuitement. Cela se fait avec des conventions plutôt que des constructions de langage. Dans toutes les classes de transfert de données (et peut-être même dans toutes les classes que vous écrivez ...), vous devez implémenter une méthode sensible toString . Vous devez donc ici surcharger toString() dans votre classe Person et renvoyer l'état souhaité.

Il y a tilitaires disponibles qui aident à écrire une bonne méthode toString, ou la plupart des IDE ont un raccourci d'écriture automatique toString().

63
serg10

D'après mon expérience, var_dump est généralement utilisé pour le débogage PHP à la place d'un débogueur pas à pas. En Java, vous pouvez bien sûr utiliser le débogueur de votre IDE pour afficher une représentation visuelle du contenu d'un objet.

29
Chase Seibert

Vos alternatives consistent à remplacer la méthode toString() de votre objet pour afficher son contenu de la manière qui vous convient ou à utiliser la réflexion pour inspecter l'objet (de la même manière que les débogueurs).

L'avantage d'utiliser la réflexion est que vous n'avez pas besoin de modifier vos objets individuels pour qu'ils soient "analysables", mais la complexité est accrue et si vous avez besoin d'une prise en charge des objets imbriqués, vous devrez l'écrire.

Ce code listera les champs et leurs valeurs pour 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));
}
18
Harry Lime

Je pense que la meilleure façon de le faire est d'utiliser google-gson (A Java pour convertir JSON en Java et vice-versa)

Télécharger Il ajoute le fichier "jar" à votre projet

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));

Sortie:

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

Vous pouvez convertir n’importe quel objet (tableaux, listes, etc.) en JSON. Je pense que c'est le meilleur analogue de PHP var_dump ()

14
Ali Mamedov

Le paquet Apache commons lang fournit une telle classe qui peut être utilisée pour construire une méthode toString () par défaut en utilisant la réflexion pour obtenir les valeurs des champs. Il suffit de regarder this .

7
reallyinsane

J'utilise Jestr avec des résultats raisonnables.

4
brmiller

J'aime utiliser GSON parce que cela dépend souvent déjà du type de projet sur lequel je travaille:

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

Ou remplacez GSON par une autre bibliothèque JSON que vous utilisez.

4
mattalxndr

J'ai trouvé cette méthode pour dump object, essayez ceci String dump (Object object)

2
qmn1711

Vous avez la sérialisation XML et vous devriez obtenir une représentation très soignée, même d'objets profondément imbriqués.

0
Daniel

Je pense que quelque chose de similaire que vous pourriez faire est de créer une méthode simple permettant d’imprimer l’objet que vous voulez voir. Quelque chose comme ça:

public static void dd(Object obj) { System.out.println(obj); }

Ce n'est pas la même chose que var_dump (), mais vous pouvez en avoir une idée générale sans avoir besoin d'aller dans votre IDE de débogueur.

0
Necare