it-swarm.com.de

Was ist das Äquivalent von Java PHP var_dump?

PHP hat eine var_dump () - Funktion, die den internen Inhalt eines Objekts ausgibt und den Typ und Inhalt eines Objekts anzeigt.

Beispielsweise:

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

wird ausgeben:

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

Was ist die Entsprechung in Java das wird das gleiche tun?

118
Jon Cram

In Java ist es nicht ganz so einfach, daher erhalten Sie es nicht kostenlos. Es wird eher mit Konventionen als mit Sprachkonstrukten gemacht. In allen Datenübertragungsklassen (und vielleicht sogar in in allen Klassen, die Sie schreiben ...) sollten Sie eine sinnvolle toString -Methode implementieren. Hier müssen Sie also toString() in Ihrer Klasse Person überschreiben und den gewünschten Status zurückgeben.

Es gibt verfügbare Dienstprogramme , die beim Schreiben einer guten toString-Methode helfen, oder die meisten IDEs verfügen über eine automatische Schreibverknüpfung toString().

63
serg10

Nach meiner Erfahrung wird var_dump normalerweise zum Debuggen PHP anstelle eines Step-through-Debuggers verwendet. In Java können Sie natürlich den Debugger Ihrer IDE verwenden, um eine visuelle Darstellung des Inhalts eines Objekts zu erhalten.

29
Chase Seibert

Alternativ können Sie die toString() -Methode Ihres Objekts überschreiben, um den Inhalt auf eine von Ihnen gewünschte Weise auszugeben, oder mithilfe von Reflektion das Objekt untersuchen (ähnlich wie bei Debuggern).

Der Vorteil der Verwendung von Reflection besteht darin, dass Sie Ihre einzelnen Objekte nicht so ändern müssen, dass sie "analysierbar" sind. Die Komplexität wird jedoch erhöht, und wenn Sie Unterstützung für verschachtelte Objekte benötigen, müssen Sie diese schreiben.

Dieser Code listet die Felder und ihre Werte für ein Object "o" auf.

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

Ich denke, der beste Weg, dies zu tun, ist die Verwendung von google-gson (Eine Java Bibliothek, um JSON in Java Objekte zu konvertieren und umgekehrt).

Download Fügen Sie Ihrem Projekt eine "jar" -Datei hinzu

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

Ausgabe:

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

Sie können jedes Objekt (Arrays, Listen usw.) in JSON konvertieren. Ich denke, dass es das beste Analogon von PHP ist var_dump ()

14
Ali Mamedov

Das Apache commons lang-Paket bietet eine solche Klasse, mit der eine Standardmethode toString () erstellt werden kann, die Reflection verwendet, um die Werte von Feldern abzurufen. Schauen Sie sich einfach this an.

7
reallyinsane

Ich benutze Jestr mit vernünftigen Ergebnissen.

4
brmiller

Ich benutze gerne GSON, weil es oft schon eine Abhängigkeit von der Art der Projekte gibt, an denen ich arbeite:

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

Oder ersetzen Sie GSON durch eine andere von Ihnen verwendete JSON-Bibliothek.

4
mattalxndr

Ich habe diese Methode gefunden, um ein Objekt zu sichern. Versuchen Sie es mit String dump (Object object)

2
qmn1711

Sie haben eine XML-Serialisierung und sollten eine sehr übersichtliche Darstellung auch tief verschachtelter Objekte erhalten.

0
Daniel

Ich denke, etwas Ähnliches, das Sie tun könnten, ist, eine einfache Methode zu erstellen, die das Objekt druckt, das Sie sehen möchten. Etwas wie das:

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

Es ist nicht dasselbe wie var_dump (), aber Sie können sich einen Überblick verschaffen, ohne zu Ihrer Debugger-IDE gehen zu müssen.

0
Necare