134 votes

Quel est l'équivalent Java de PHP var_dump ?

PHP dispose d'un var_dump() qui produit le contenu interne d'un objet, en indiquant le type et le contenu de l'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);

produira un résultat :

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

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

1 votes

Avez-vous essayé db4o ? il n'est pas spécifiquement pour cela, mais je pense qu'il fonctionnera parfaitement ;

71voto

serg10 Points 10157

Elle n'est pas tout à fait intégrée à Java et n'est donc pas gratuite. Cela se fait par convention plutôt que par des constructions linguistiques. 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 un [toString](http://java.sun.com/javase/6/docs/api/java/lang/Object.html#toString()) méthode. Donc ici vous devez surcharger toString() dans votre Person et renvoie l'état souhaité.

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

0 votes

Voir aussi stackoverflow.com/questions/9444573/ sur l'alternative Guava et le modèle Intellij IDEA.

30voto

Chase Seibert Points 7609

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

10 votes

Oui, la plupart des développeurs PHP ou Web oublient le débogage. Parce qu'ils préfèrent voir le résultat du débogage dans le navigateur.

10 votes

Vous ne pouvez pas utiliser le débogueur de votre IDE si, par exemple, vous programmez votre code JSP dans l'éditeur par navigateur d'Adobe Experience Manager. :(

0 votes

Peut-être pouvons-nous l'utiliser pour tester le comportement de votre programme dans un environnement réel en imprimant le vardump au format html.

18voto

Harry Lime Points 8229

Vous avez la possibilité de remplacer l'option toString() de votre objet pour afficher son contenu d'une manière qui vous convient, ou pour utiliser la réflexion pour inspecter l'objet (d'une manière similaire à ce que font les débogueurs).

L'avantage d'utiliser la réflexion est que vous n'aurez pas besoin de modifier vos objets individuels pour qu'ils soient "analysables", mais cela ajoute de la complexité et si vous avez besoin d'un support pour les objets imbriqués, vous devrez l'écrire.

Ce code listera les champs et leurs valeurs pour un fichier de type 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 votes

C'est quoi ce Field que tu utilises, importé d'où ?

3 votes

Java.lang.reflect.Field

17voto

Ali Mamedov Points 101

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

Télécharger Il, ajouter 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 qu'il s'agit du meilleur analogue de la fonction var_dump()

4 votes

Intéressant... savez-vous pourquoi ce n'est pas une méthode statique ?

2 votes

Vous pouvez l'utiliser comme une méthode statique : new Gson().toJson(...) sans créer de nouvelles variables.

0 votes

Je pense qu'il est préférable de l'abstraire dans une classe utilitaire personnalisée plutôt que de l'utiliser directement, ce qui vous donne la possibilité de gérer les dépendances avec des tiers.

8voto

reallyinsane Points 552

Le paquet apache commons lang fournit une telle classe qui peut être utilisée pour construire une méthode par défaut toString() utilisant la réflexion pour obtenir les valeurs des champs. Jetez un coup d'œil à este .

0 votes

0 votes

Ces deux liens sont morts

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X