Hier ist auch ein schneller Trick / eine schnelle Implementierung: @Override public String toString () {return org.apache.commons.lang3.builder.ToStringBuilder.reflectionToString (this); }
Gibt eine Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen gibt die toString
Methode eine Zeichenfolge zurück, die dieses Objekt "textuell darstellt". Das Ergebnis sollte eine präzise, aber informative Darstellung sein, die für eine Person leicht zu lesen ist. Es wird empfohlen, dass alle Unterklassen diese Methode überschreiben.
Die toStringMethode für die Klasse Object
gibt eine Zeichenfolge zurück, die aus dem Namen der Klasse, deren Instanz das Objekt ist, dem Vorzeichen "@" und der vorzeichenlosen hexadezimalen Darstellung des Hash-Codes des Objekts besteht. Mit anderen Worten, diese Methode gibt eine Zeichenfolge zurück, die dem Wert von:
Der Hauptzweck besteht darin, es in Unterklassen zu überschreiben. Ich denke, Antworten von @stephen und Andreas_D sind besser als akzeptierte Antworten.
Sree Rama
39
Verwendung der String.toString:
Wann immer Sie den Konstruktor namens value im StringFormular untersuchen müssen, können Sie einfach String.toString... als Beispiel ... verwenden.
package pack1;import java.util.*;classBank{String n;String add;int an;int bal;int dep;publicBank(String n,String add,int an,int bal){this.add = add;this.bal = bal;this.an = an;this.n = n;}publicString toString(){return"Name of the customer.:"+this.n +",, "+"Address of the customer.:"+this.add +",, "+"A/c no..:"+this.an +",, "+"Balance in A/c..:"+this.bal;}}publicclassDemo2{publicstaticvoid main(String[] args){List<Bank> l =newLinkedList<Bank>();Bank b1 =newBank("naseem1","Darbhanga,bihar",123,1000);Bank b2 =newBank("naseem2","patna,bihar",124,1500);Bank b3 =newBank("naseem3","madhubani,bihar",125,1600);Bank b4 =newBank("naseem4","samastipur,bihar",126,1700);Bank b5 =newBank("naseem5","muzafferpur,bihar",127,1800);
l.add(b1);
l.add(b2);
l.add(b3);
l.add(b4);
l.add(b5);Iterator<Bank> i = l.iterator();while(i.hasNext()){System.out.println(i.next());}}}
... kopieren Sie dieses Programm in Ihre Eclipse und führen Sie es aus ... Sie erhalten die Ideen zu String.toString...
Ich hoffe, Sie wissen, dass dies toStringnicht beabsichtigt und nicht für Benutzeroberflächenzwecke geeignet ist.
Powerslave
@Powerslave erklärt dann, warum alle Swing-Komponenten toStringein Objekt in der GUI anzeigen? Wenn ich ein umfangreiches Objekt habe und es in einer GUI anzeigen möchte, nein, ich erstelle weder einen zusätzlichen Renderer dafür, noch extrahiere ich eine Zeichenfolgeeigenschaft aus dem Objekt, um diese in der GUI zu verwenden. Ich behalte sie einfach und umsetzbar toString, um all diesen Aufwand umgehen zu können. Wenn Sie dies sauberer tun möchten, erstellen Sie eine Wrapper-Klasse, die für Benutzeroberflächenzwecke vorgesehen ist, und implementieren ihre toStringMethode, um eine Zeichenfolgeeigenschaft des Wrappees zurückzugeben.
Timmos
1
@Timmos Wenn deine Freunde von einer Brücke springen würden, würdest du folgen? Nur weil die Swing-Entwickler die toString-Funktion verwenden (lesen; missbrauchen), heißt das nicht, dass Sie dies auch tun sollten.
Toby Caulk
2
Dies ist bei weitem der einfachste Ansatz, um die Arbeit zu erledigen, da Sie weiterhin die Standard-Swing-API verwenden. Wenn Sie ein benutzerdefiniertes Rendering wünschen, installieren Sie einen benutzerdefinierten Renderer auf Ihrer Komponente. Wenn Sie nur ein Objekt anzeigen möchten, das durch einen String dargestellt wird, ist die Implementierung von toString () viel einfacher als bei einem benutzerdefinierten Renderer, der alle möglichen Fallstricke aufweist, um es richtig zu machen. Ich finde Ihren Vergleich mit dem Abspringen von einer Brücke seltsam.
Timmos
35
Die toString()Methode gibt eine Textdarstellung eines Objekts zurück. Eine grundlegende Implementierung ist bereits enthalten, java.lang.Objectund da alle Objekte davon erben java.lang.Object, ist garantiert, dass jedes Objekt in Java über diese Methode verfügt.
Das Überschreiben der Methode ist immer eine gute Idee, insbesondere beim Debuggen, da Debugger häufig Objekte anhand des Ergebnisses der toString()Methode anzeigen. Verwenden Sie also eine sinnvolle Implementierung, aber verwenden Sie sie für technische Zwecke. Die Anwendungslogik sollte Getter verwenden:
Es kann optional im Kontext einer Anwendung verwendet werden, wird jedoch weitaus häufiger für Debugging-Zwecke verwendet. Wenn Sie beispielsweise einen Haltepunkt in einer IDE erreichen, ist es viel einfacher, aussagekräftige toString()Objekte zu lesen, als deren Mitglieder zu untersuchen.
Es gibt keine festgelegten Anforderungen für die toString()Vorgehensweise einer Methode. Konventionell werden Ihnen meistens der Name der Klasse und der Wert der relevanten Datenelemente angezeigt. Meistens werden toString()Methoden in IDEs automatisch generiert.
toString()Es ist eine schlechte Idee, sich auf eine bestimmte Ausgabe einer Methode zu verlassen oder sie innerhalb eines Programms zu analysieren. Was auch immer Sie tun, gehen Sie diesen Weg nicht.
toString () gibt eine Zeichenfolge / Textdarstellung des Objekts zurück. Die toString () -Methode wird häufig für Diagnosezwecke wie Debuggen, Protokollieren usw. verwendet, um wichtige Details zum Objekt zu lesen.
Es wird automatisch aufgerufen, wenn das Objekt an println, print, printf, String.format (), assert oder den String-Verkettungsoperator übergeben wird.
Die Standardimplementierung von toString () in der Klasse Object gibt eine Zeichenfolge zurück, die aus dem Klassennamen dieses Objekts gefolgt von @ sign und der vorzeichenlosen hexadezimalen Darstellung des Hashcodes dieses Objekts unter Verwendung der folgenden Logik besteht:
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Überschreiben Sie nun toString () in der Coordinates-Klasse wie folgt:
@OverridepublicString toString(){return"("+ x +", "+ y +")";}
führt zu
Bourne's current location - (1.0, 2.0) //concise and informative
Die Nützlichkeit des Überschreibens von toString () wird noch größer, wenn die Methode für Sammlungen aufgerufen wird, die Verweise auf diese Objekte enthalten. Zum Beispiel das Folgende
Sie sollten die toString () -Methode fast immer überschreiben. Einer der Fälle, in denen die Überschreibung nicht erforderlich wäre, sind Dienstprogrammklassen, die statische Dienstprogrammmethoden nach Art von java.util.Math gruppieren . Der Fall, dass keine Außerkraftsetzung erforderlich ist, ist ziemlich intuitiv. fast immer würde man es wissen.
Die zurückgegebene Zeichenfolge sollte präzise und informativ sein, idealerweise selbsterklärend.
Zumindest die Felder, die zum Herstellen der Äquivalenz zwischen zwei verschiedenen Objekten verwendet werden, dh die Felder, die in der Implementierung der equals () -Methode verwendet werden, sollten von der toString () -Methode ausgespuckt werden.
Geben Sie Accessoren / Getter für alle Instanzfelder an, die in der zurückgegebenen Zeichenfolge enthalten sind. Zum Beispiel in der Klasse "Koordinaten"
Wenn Sie toString () in der Pojo-Klasse (Student.java) nicht gewohnt sind, erhalten Sie eine Ausgabe wie [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]. Um diese Art von Problemen zu vermeiden, verwenden wir die toString () -Methode.
funktioniert, und indem Sie den Standard toString () von Object in Ihren eigenen Klassen überschreiben, können Sie Ihre Objekte auch in String-Kontexten nützlich machen.
(Und betrachten Sie es als Black Box! Verwenden Sie den Inhalt niemals für etwas anderes als für die Präsentation vor einem Menschen.)
Abgesehen davon, was Cletus in Bezug auf das Debuggen beantwortet hat, wird es immer dann verwendet, wenn Sie ein Objekt ausgeben, beispielsweise wenn Sie es verwenden
Der Hauptzweck von toString besteht darin, eine String-Darstellung eines Objekts zu generieren. Dies bedeutet, dass der Rückgabewert immer ein String ist. In den meisten Fällen ist dies einfach der Klassen- und Paketname des Objekts, aber in einigen Fällen wie StringBuilder erhalten Sie tatsächlich einen String-Text.
/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/publicString toString(){StringBuffer sb =newStringBuffer();Field[] fields = getClass().getDeclaredFields();//Get all fields incl. private onesfor(Field field : fields){try{
field.setAccessible(true);String key=field.getName();String value;try{
value =(String) field.get(this);}catch(ClassCastException e){
value="";}
sb.append(key).append(": ").append(value).append("\n");}catch(IllegalArgumentException e){
e.printStackTrace();}catch(SecurityException e){
e.printStackTrace();}catch(IllegalAccessException e){
e.printStackTrace();}}return sb.toString();}
Wenn Sie zuerst Python und dann Java lernen. Ich denke, es spielt die gleiche Rolle wie die __str__()Methode in Python, es ist eine magische Methode wie __dict__()und, __init__()aber um auf eine Zeichenfolge zu verweisen, die das Objekt darstellt.
Antworten:
Aus den
Object.toString
Dokumenten:Beispiel:
quelle
Verwendung der
String.toString
:Wann immer Sie den Konstruktor namens value im
String
Formular untersuchen müssen, können Sie einfachString.toString
... als Beispiel ... verwenden.... kopieren Sie dieses Programm in Ihre Eclipse und führen Sie es aus ... Sie erhalten die Ideen zu
String.toString
...quelle
toString
nicht beabsichtigt und nicht für Benutzeroberflächenzwecke geeignet ist.toString
ein Objekt in der GUI anzeigen? Wenn ich ein umfangreiches Objekt habe und es in einer GUI anzeigen möchte, nein, ich erstelle weder einen zusätzlichen Renderer dafür, noch extrahiere ich eine Zeichenfolgeeigenschaft aus dem Objekt, um diese in der GUI zu verwenden. Ich behalte sie einfach und umsetzbartoString
, um all diesen Aufwand umgehen zu können. Wenn Sie dies sauberer tun möchten, erstellen Sie eine Wrapper-Klasse, die für Benutzeroberflächenzwecke vorgesehen ist, und implementieren ihretoString
Methode, um eine Zeichenfolgeeigenschaft des Wrappees zurückzugeben.Die
toString()
Methode gibt eine Textdarstellung eines Objekts zurück. Eine grundlegende Implementierung ist bereits enthalten,java.lang.Object
und da alle Objekte davon erbenjava.lang.Object
, ist garantiert, dass jedes Objekt in Java über diese Methode verfügt.Das Überschreiben der Methode ist immer eine gute Idee, insbesondere beim Debuggen, da Debugger häufig Objekte anhand des Ergebnisses der
toString()
Methode anzeigen. Verwenden Sie also eine sinnvolle Implementierung, aber verwenden Sie sie für technische Zwecke. Die Anwendungslogik sollte Getter verwenden:quelle
Es kann optional im Kontext einer Anwendung verwendet werden, wird jedoch weitaus häufiger für Debugging-Zwecke verwendet. Wenn Sie beispielsweise einen Haltepunkt in einer IDE erreichen, ist es viel einfacher, aussagekräftige
toString()
Objekte zu lesen, als deren Mitglieder zu untersuchen.Es gibt keine festgelegten Anforderungen für die
toString()
Vorgehensweise einer Methode. Konventionell werden Ihnen meistens der Name der Klasse und der Wert der relevanten Datenelemente angezeigt. Meistens werdentoString()
Methoden in IDEs automatisch generiert.toString()
Es ist eine schlechte Idee, sich auf eine bestimmte Ausgabe einer Methode zu verlassen oder sie innerhalb eines Programms zu analysieren. Was auch immer Sie tun, gehen Sie diesen Weg nicht.quelle
toString () gibt eine Zeichenfolge / Textdarstellung des Objekts zurück. Die toString () -Methode wird häufig für Diagnosezwecke wie Debuggen, Protokollieren usw. verwendet, um wichtige Details zum Objekt zu lesen.
Es wird automatisch aufgerufen, wenn das Objekt an println, print, printf, String.format (), assert oder den String-Verkettungsoperator übergeben wird.
Die Standardimplementierung von toString () in der Klasse Object gibt eine Zeichenfolge zurück, die aus dem Klassennamen dieses Objekts gefolgt von @ sign und der vorzeichenlosen hexadezimalen Darstellung des Hashcodes dieses Objekts unter Verwendung der folgenden Logik besteht:
Zum Beispiel das Folgende
druckt
Überschreiben Sie nun toString () in der Coordinates-Klasse wie folgt:
führt zu
Die Nützlichkeit des Überschreibens von toString () wird noch größer, wenn die Methode für Sammlungen aufgerufen wird, die Verweise auf diese Objekte enthalten. Zum Beispiel das Folgende
druckt
an Stelle von,
Nur wenige Implementierungszeiger,
Geben Sie Accessoren / Getter für alle Instanzfelder an, die in der zurückgegebenen Zeichenfolge enthalten sind. Zum Beispiel in der Klasse "Koordinaten"
Eine umfassende Beschreibung der toString () -Methode finden Sie in Punkt 10 des Buches Effective Java ™, Second Edition, von Josh Bloch.
quelle
Codierung:
Student.java:
Ausgabe:
Wenn Sie toString () in der Pojo-Klasse (Student.java) nicht gewohnt sind, erhalten Sie eine Ausgabe wie
[com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
. Um diese Art von Problemen zu vermeiden, verwenden wir die toString () -Methode.quelle
Wenn Sie in einem String-Kontext auf ein Objekt zugreifen (das kein String ist), wird toString () vom Compiler unter dem Deckmantel aufgerufen.
Deshalb
funktioniert, und indem Sie den Standard toString () von Object in Ihren eigenen Klassen überschreiben, können Sie Ihre Objekte auch in String-Kontexten nützlich machen.
(Und betrachten Sie es als Black Box! Verwenden Sie den Inhalt niemals für etwas anderes als für die Präsentation vor einem Menschen.)
quelle
Eine korrekt überschriebene toString-Methode kann beim Protokollieren und Debuggen von Java hilfreich sein.
quelle
Abgesehen davon, was Cletus in Bezug auf das Debuggen beantwortet hat, wird es immer dann verwendet, wenn Sie ein Objekt ausgeben, beispielsweise wenn Sie es verwenden
oder
quelle
Der Hauptzweck von toString besteht darin, eine String-Darstellung eines Objekts zu generieren. Dies bedeutet, dass der Rückgabewert immer ein String ist. In den meisten Fällen ist dies einfach der Klassen- und Paketname des Objekts, aber in einigen Fällen wie StringBuilder erhalten Sie tatsächlich einen String-Text.
quelle
quelle
Wenn Sie zuerst Python und dann Java lernen. Ich denke, es spielt die gleiche Rolle wie die
__str__()
Methode in Python, es ist eine magische Methode wie__dict__()
und,__init__()
aber um auf eine Zeichenfolge zu verweisen, die das Objekt darstellt.quelle
Das
toString()
konvertiert das angegebene Objekt in einen Zeichenfolgenwert.quelle