Wie Drucke ich meine Java-Objekt ohne "SomeType@2f92e0f4"?
Habe ich eine Klasse wie folgt definiert:
public class Person {
private String name;
//constructor and getter/setter omitted
}
Habe ich versucht zu drucken, die eine Instanz meiner Klasse:
System.out.println(myPerson);
aber ich bekam die folgende Ausgabe: com.foo.Person@2f92e0f4
.
Etwas ähnliches passiert, als ich versuchte, zu drucken, die ein array von Person
Objekte:
Person[] people = //...
System.out.println(people);
Bekam ich die Ausgabe: [Lcom.foo.Person;@28a418fc
Was hat diese Ausgabe zu bedeuten??? Wie ändere ich diese Ausgabe enthält also den Namen von meiner person? Und wie Drucke ich die Sammlungen meiner Objekte?
Hinweis: dies ist gedacht als eine kanonische Q&A über dieses Thema.
Sie können GSON - Bibliothek zu konvertieren Objekt nach json und Umgekehrt. Sehr nützlich für die Fehlersuche.
Siehe auch stackoverflow.com/questions/27647567/...
Siehe auch stackoverflow.com/questions/27647567/...
InformationsquelleAutor Duncan Jones | 2015-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hintergrund
Alle Java-Objekte besitzen eine
toString()
- Methode, die aufgerufen wird, wenn Sie versuchen, und drucken Sie das Objekt.Diese Methode ist definiert in der
Object
Klasse (der Oberklasse aller Java-Objekte). Die- Objekt.toString()
Methode gibt eine ziemlich hässliche suchen string, zusammengesetzt aus den Namen der Klasse, ein@
symbol und die hashcode des Objekts in hexadezimaler. Der code HIERFÜR sieht wie folgt aus:Ergebnis wie
com.foo.MyType@2f92e0f4
kann daher erklärt werden, wie:com.foo.MyType
- der name der Klasse, d.h. die KlasseMyType
im Paketcom.foo
.@
- Verknüpfungen die Zeichenfolge zusammen2f92e0f4
den hashcode des Objekts.Den Namen der array-Klassen, die etwas anders Aussehen, das ist gut erklärt in den Javadocs für
- Klasse.getName()
. Zum Beispiel[Ljava.lang.String
bedeutet:[
- ein eindimensionales array (im Gegensatz zu[[
oder[[[
etc.)L
- array enthält eine Klasse oder ein interfacejava.lang.String
- der Typ der Objekte in dem arrayAnpassen der Ausgabe
Drucken etwas anderes, wenn Sie anrufen
System.out.println(myObject)
müssen Sie überschreiben dietoString()
- Methode in eine eigene Klasse. Hier ein einfaches Beispiel:Nun, wenn wir drucken eine
Person
wir finden Ihren Namen eher alscom.foo.Person@12345678
.Beachten Sie, dass
toString()
ist nur eine Weg, ein Objekt in einen string umgewandelt. Typischerweise wird diese Leistung vollständig zu beschreiben, Ihr Objekt in eine klare und präzise Art und Weise. Eine besseretoString()
für unserePerson
- Klasse könnte sein:Welche drucken würde, z.B.
Person[name=Henry]
. Das ist ein wirklich nützliches Stück von Daten, die für das Debuggen/testen.Wenn Sie möchten, um den Fokus auf nur einen Aspekt des Objekts, oder eine Menge jazziger formatieren, könnten Sie besser zu definieren, eine separate Methode statt, z.B.
String toElegantReport() {...}
.Automatische Generierung der Ausgabe
Viele IDEs bieten Unterstützung für die automatische Generierung eines
toString()
- Methode, basierend auf den Feldern in der Klasse. Siehe docs für Eclipse und IntelliJ, zum Beispiel.Mehreren gängigen Java-Bibliotheken bieten diese Funktion auch. Einige Beispiele sind:
ToStringBuilder
von Apache Commons LangMoreObjects.ToStringHelper
von Google Guava@ToString
annotation von Projekt LombokDrucken von Objektgruppen
Nun haben Sie also einen schönen
toString()
für Ihre Klasse. Was passiert wenn die Klasse in ein array oder eine collection?Arrays
Wenn Sie ein array von Objekten, die Sie nennen können
- Arrays.toString()
, um zu einer einfachen Darstellung der Inhalte des Arrays. Zum Beispiel, betrachten Sie das array vonPerson
Objekte:Hinweis: dies ist ein Aufruf zu einer statische Methode namens
toString()
in der Arrays-Klasse, die unterschiedlich ist zu dem, was wir besprochen haben, vor.Wenn Sie eine multi-dimensional array, die Sie verwenden können,
- Arrays.deepToString()
zu erreichen, die gleiche Art von Ausgabe.Sammlungen
Meisten Kollektionen produzieren ein ziemlich Ausgabe basierend auf Berufung
.toString()
auf jedes element.So brauchen Sie nur, um sicherzustellen, dass Ihre Listen-Elemente definieren einen schönen
toString()
wie oben beschrieben.return String.format( getClass().getSimpleName() + "[ name=%s ]", name);
und wirklich stattname
es sollte der gettergetName()
(aber Getter ausgespart wurden in die Klasse "Person"...), aber wenn eine get-Methode verwendet wurde ...return String.format( getClass().getSimpleName() + "[ name=%s ]", getName());
wenn ich zwei Klassen in der java-Datei dann wie erstellen Sie ein Objekt der Klasse ist nicht öffentlich A.java public class A{ } class B { } ------ C.java public class C{ A A = new A(); }
Beachten Sie, dass es überladene Versionen von
Arrays.toString()
so können Sie es verwenden, für arrays von primitiven zu (int[]
,double[]
). AuchArrays.deepToString()
Griffe mehrdimensionale arrays von primitiven schön.InformationsquelleAutor Duncan Jones
Ich denke, dass der apache bietet eine bessere util-Klasse, die eine Funktion, um die Zeichenfolge
InformationsquelleAutor Rohith K
Jede Klasse in Java hat die
toString()
Methode standardmäßig, die aufgerufen wird, wenn Sie übergeben Sie ein Objekt der KlasseSystem.out.println()
. Standardmäßig ist dieser Aufruf gibt den Klassennamen@hashcode des Objekts.Können Sie überschreiben Sie die toString-Methode einer Klasse, um verschiedene Ausgabe. Siehe dieses Beispiel
[Lcom.foo.Person;@28a418fc
als Ausgabe: das ist die Ausgabe vontoString()
Methode, auch, aber das ist in der Klasse implementiert, die zur Laufzeit generiert, die für die ArtPerson[]
, nichtPerson
(siehe stackoverflow.com/a/8546532/1542343).Diese Ausgabe bedeutet package.Class@Hashcode . Die Standard toString() Methode hat den Rückgabetyp wie. Rendite-Objekt.hasCode() oder ähnliche return-Anweisung, die sich wieder hashcode in hexadezimaler form zusammen mit der Klasse name.
InformationsquelleAutor Pankaj Manali
In Eclipse
Gehen Sie zu Ihrer Klasse,
Rechte Maustaste->Quellen->Generieren
toString()
;Überschreibt er die
toString()
Methode und druckt das Objekt der Klasse.InformationsquelleAutor Ketan Keshri
In intellij Sie können das automatische generieren toString-Methode durch drücken von alt+Einschub auswählen und dann toString() hier ist ein out put für eine test-Klasse:
Wie Sie sehen können, es erzeugt eine Zeichenfolge durch Verkettung mehrere Attribute der Klasse, für die primitiven es wird gedruckt, Ihre Werte und bei Referenztypen wird es mit Ihrer Klasse geben (in diesem Fall string-Methode von Test2).
InformationsquelleAutor Mr.Q
Standardmäßig wird jedes Objekt in Java hat die
toString()
Methode, die Ausgänge ObjectType@HashCode.Wenn du mehr willst aussagekräftige Informationen, dann müssen Sie das überschreiben der
toString()
Methode in Ihrer Klasse.Nun, wenn Sie drucken Sie das person-Objekt mit
System.out.prtinln(personObj);
es wird gedruckt der name der person, statt den Klassennamen und den hashcode.In Ihrem zweiten Fall, wenn Sie versuchen, drucken Sie das array, druckt es
[Lcom.foo.Person;@28a418fc
der Array-Typ und es ist hashcode.Wenn Sie möchten, drucken Sie die person, Namen gibt es viele Möglichkeiten.
Könnten Sie schreiben Ihre eigene Funktion durchläuft jede person und druckt
Könnten Sie drucken es mit Arrays.toString(). Dies scheint die einfachste zu mir.
Könnten Sie drucken es die java-8-Weg (mit Bächen und Methode, Referenz).
Möglicherweise gibt es andere Möglichkeiten als gut. Hoffe, das hilft. 🙂
InformationsquelleAutor adn.911
Wenn Sie Direkt drucken jedes Objekt, von Person Es werden die
ClassName@HashCode
den Code.in Ihrem Fall
com.foo.Person@2f92e0f4
wird immer gedruckt . WoPerson
ist eine Klasse, zu der das Objekt gehört und2f92e0f4
ist der hashCode des Objekts.Nun, wenn Sie versuchen, das Objekt der
Person
dann wird es drucken Sie den NamenInformationsquelleAutor Vikrant Kashyap
Ich lieber eine utility-Funktion, die verwendet GSON zu de-serialisieren der Java-Objekt in einen JSON-string.
InformationsquelleAutor Agam
Wenn Sie einen Blick auf die Object-Klasse ist (Oberklasse aller Klassen in Java die toString () - Methode ist die Umsetzung
Wann immer Sie drucken jedes Objekt in Java dann die toString () - Aufruf. Jetzt ist es bis zu Ihnen, wenn Sie überschreiben der toString () - dann Ihre Methode aufrufen, andere Klasse Objekt Methodenaufruf.
InformationsquelleAutor Yasir Shabbir Choudhary
Oben genannten Funktion print array-Objekt von verschiedenen primitiven.
InformationsquelleAutor Hemant Thorat