Frage

letzte Mal habe ich gefragt, wie eine Datenstruktur hier bevölkern zu. Jetzt würde ich gerne wissen, ob es etwas in Java ist, wie die print_r ich in PHP zu verwenden, darzustellen was ich in den Karten und Listen bevölkerte ohne meinen eigenen Algorithmus zu tun.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Beim toString auf die Sammlung sollte einen String zurückgeben, alle Elemente Stringdarstellungen enthalten.

Dies wird allerdings nicht mit einer in den Arrays arbeiten, da sie nicht über eine toString Überschreibung haben und werden Ihnen nur eine Speicheradresse geben.

Andere Tipps

Es gibt wirklich Unterschied zwischen toString () in Java und print_r () in PHP. Beachten Sie, dass es auch ist __toString () in PHP, die toString entspricht () in Java, so ist dies nicht wirklich die Antwort.

print_r wird verwendet, wenn wir eine Struktur von Objekten haben, und wir möchten schnell die komplette grafische Darstellung von Objekten mit ihren Werten zu sehen.

toString in Java-Implementierung für jedes Objekt hat nicht die Kraft, mit print_r zu vergleichen.

Stattdessen verwenden Gson. Es macht die gleiche Arbeit wie print_r

  

Gson Gson = new GsonBuilder () setPrettyPrinting () erstellen ();..
   System.out.println (gson.toJson (someobject));

Auf diese Weise brauchen Sie nicht toString zu implementieren für jedes Objekt, das Sie brauchen, um es zu testen.

Hier ist die Dokumentation: http://sites.google.com/site/gson/gson-user-guide

Demo-Klassen (in Java):

  

public class A {

int firstParameter = 0;
B secondObject = new B();
     

}

     

public class B {

String myName = "this is my name";  
     

}

Hier ist die Ausgabe in php mit print_r:

  

Objekt
  (
      [FirstParameter: privat] => 0
      [Second: privat] => B Objekt
          (
              [MyName: privat] => Das ist mein Name
          )

     

)

Hier ist die Ausgabe in Java mit Gson:

  

{
    "FirstParameter": 0,
    "Second": {
      "MyName": "Das ist mein Name"
    }
  }

Je nach genau das, was Sie tun wollen, könnte die Lösung recht einfach sein. Im Folgenden wird die formatierte Ausgabe nicht produzieren, die print_r liefert, aber es wird Ihnen zur Ausgabe der Struktur von Listen, Arrays ermöglichen und Karten:

    // Output a list
    final List<String> list = new ArrayList<String>();
    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    System.out.println(list);

    // Output an array
    final String[] array = {"four", "three", "two", "one"};
    System.out.println(Arrays.asList(array));

    // Output a map
    final Map<String, String> map = new HashMap<String, String>();
    map.put("one", "value");
    map.put("two", "value");
    map.put("three", "value");
    System.out.println(map.entrySet());

Für andere Arten von Objekten könnten Sie Reflexion ein Dienstprogramm erstellen für diesen Zweck.

Sie können die guten alten Apache Commons Langs ToStringBuilder .

Meine Meinung für einen Java-print_r wie Funktionalität, ist die Klasse RecursiveDump dass ich geschrieben habe. Es ist nicht perfekt, aber es funktioniert gut für mich. Die Nutzung ist:

String output = RecursiveDump.dump(...);

Es könnte Generika verbessert mit, ich habe es vor vielen Jahren geschrieben habe, bevor ich über sie wusste. Auch während es versucht, mit einigen Art der Sammlung zu beschäftigen, mit Objekten wird es nur die toString() Methode aufrufen.

Ich dachte, Reflexion verwenden Feldnamen für Klassen ohne eine richtige toString() zu extrahieren, aber da Frühling Roo @RooToString können die toString() Methode schreiben für Sie ...

Natürlich ist die Alternative ist, die Kontrolleur Werkzeug eines Debuggers zu verwenden, aber manchmal ist schneller druckt zu verwenden.

Andere haben die toString() Methode erwähnt. Das ist wirklich nur dann sinnvoll, wenn das Objekt implementiert toString(). Wenn sie nicht umgesetzt worden richtig werden Sie mit so etwas wie dieses am Ende. java.lang.Object@1b9240e

Auch wenn es ein wenig langweilig ist es noch leicht ist toString() in Ihren eigenen Klassen zu implementieren, aber Dritte Klassen werden es nicht immer realisieren. Sie sind viel besser dran mit einem Debugger. Der einzige Grund, Dinge wie print_r auch in PHP vorhanden ist wegen des Fehlens eines echten Debugger. Ich glaube, Sie werden feststellen, dass die Fähigkeit, Breakpoints zu setzen, anstatt eine Reihe von Diagnose print-Anweisungen der Verwendung wird in einem viel schnelleren Workflow und saubereren Code zur Folge hat.

Ich weiß nicht, von einem Äquivalent von print_r in Java.

Aber ...

Jedes Objekt hat eine Standardimplementierung der Methode toString (), die Liste und Karte Implementierungen drucken ihre Inhalte, wenn Sie toString () aufrufen, für sie.

Wenn Sie alle Debug-Informationen ausgedruckt, toString () kann der Ort sein, die Sie suchen.

Es gibt kein Äquivalent für print_r in Java.

Aber für Karten oder Listen Sie die foreach-Schleife wie folgt verwendet werden:

List <String> list = …; // fills your list 

// print each list element 

for (String s : list) {

   System.out.println(s);

 }

Für Arrays der einfachste Weg ist Arrays.asList (Array) .toString (). Ich implementieren allgemein toString () auf Objekte, die ich in Debug-Ausgaben Habe mag. obwohl für generierte Objekte (JAXB etc.) Möglicherweise müssen Sie eine Utility-Klasse machen es zu drucken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top