Frage

Neben natürlich ihre Verwendung mit Primitiven. Die meisten (wenn nicht alle) der Implementierungen Ich sehe nur dann sinnvoll von einem Programmierer Sicht ist.


EDIT : Ich verstehe, dass ich soll das Standardverhalten außer Kraft zu setzen, das ist, warum ich Implementierungen erwähnt :). Und das tue ich den Wert bekommen es in einigen Komponenten zwingende eine String-Darstellung in einer GUI zu erfordern. Doch in der JDK zumindest sehe ich viel von Implementierungen, die nur kommen, zu verwenden, wenn Sie die Objektinstanzen debuggen müssen.

Warum ist es in der Objektklasse verwurzelt, denn das scheint nur für GUI / Debugging Sachen nützlich? gibt es andere Verwendungen ich nicht bewusst bin?

War es hilfreich?

Lösung

toString () ist nützlich, wenn Sie eine String-Darstellung eines Objekts wollen. Natürlich das geschieht für Debugging-Zwecke, sondern kann auch zur Ausgabe von Betriebsergebnissen für den Benutzer gültig sein.

Zum Beispiel, sagen wir mal Sie eine komplexe Klasse haben, die komplexe Zahlen behandelt. Wenn Sie sie aus zu einem Benutzer in einem Format wie drucken möchten 3 + 2i , ist es praktisch, wenn sie toString () definieren, da Sie nicht jedes Mal, um das Format zu schreiben haben und die Ausgabe wird konsistent. Wenn man sich nur wünschen, dass die Darstellung zu ändern, zum Beispiel zu 3 + 2j , müssen Sie nur die Methode toString () in der Klasse Complex berühren.

So toString () ist auch nicht für Debug-Zwecke, aber es ist eine gute Möglichkeit, konsistente Zeichenfolge Darstellungen Ihrer Objekte zu erhalten.

Andere Tipps

Nein, ist der Schlüssel, dass Sie die Standardimplementierung von ToString() außer Kraft zu setzen sind angeblich, um es nützlich zu machen. ToString() kann eine gute Möglichkeit zur Ausgabe kann der Wert von etwas zurück zu der Benutzeroberfläche.

Ein einfaches Beispiel wäre, wenn Sie einen Namen Klasse, die mit drei Saiten (First, Mitte, Last). Sie können eine ToString() Methode, die es für die UI-Formate. „Nachname, Vorname Middle“ zum Beispiel

oder eine Klasse, die eine mathematische Operation speichert (Wert Links = 2, rechts = 3, Ergebnis = 6 und ein Operator ENUM = Multiply). Rufen Sie ToString() zu bekommen "2 * 3 = 6".

Jedoch , es ist wahrscheinlich häufiger eine Vielzahl von verschiedenen To<qualifier>String() Methoden zu haben, wie die .NET DateTime Klasse. (ToShortDateString(), ToLongDateString(), ToLongTimeString(), ...)

Edit:. Was, warum es bei der Object Klasse verwurzelt ist, ist es einfach, weil ToString() eine gültige Operation für ist alles

Darüber hinaus können Strings eine gute Möglichkeit, zwischen Datentypen oder Datenkonsumenten von Marshalling, weil es (praktisch) ist garantiert parsable sein und erfordert keine zusätzliche Codierung oder Pflege.

Meine persönliche Präferenz ist, dass toString () sollte nie für alles verwendet werden, um andere als debuggen. Wenn Sie eine Zeichenfolge für ein Objekt erzeugen möchten, eine gesonderte Methode, die eindeutig dokumentiert Ihre Absicht (getName (), getDescription (), etc). Verlassen Sie sich nie auf die Umsetzung einer toString ().

Das Problem ist, dass viele Entwickler toString () als Debug-Level-String und denken sich nichts ändert es sehen (zum Beispiel, wenn neue Felder hinzugefügt oder entfernt werden). Heck, einige automatisierte toString () Builder verwenden Reflexion eine toString () aus den Feldern zu erzeugen.

ich gefunden habe, diese Präferenz mich gut über die Jahre gedient hat.

Alles, was ich sagen kann, ist, dass ich Code Pause gehabt habe, wenn ich das toString meiner Klasse geändert einige zusätzliche Debug-Informationen angezeigt werden.

Der betreffende Code war eine GUI-Bibliothek, die den Wert von toString als eine interne Sache entschieden (es war vor ein paar Jahren ... ich vergessen, was es war genau das). Das Endergebnis war, dass ich nicht mehr, dass die Bibliothek verwendet haben.

Ich würde sagen, dass da eine große Gruppe von Menschen sieht toString wie für das Debuggen verwendet werden (unabhängig von Ihrer Meinung, was es Sie denken, sollte es für verwendet werden), dass es problematisch ist die Verwendung des Wertes von ihm zurück machen alles tun, programmatischen (wie parsen) oder es einem Benutzer angezeigt werden soll.

Wenn Sie 100% Kontrolle über die toString Methoden sind dann mit allen Mitteln zu tun, was Sie wollen.

Also, die Frage zu beantworten, ist kein toString nicht nur nützlich für das Debuggen, können Sie alles tun können, Sie wollen mit ihm. Doch seien Sie nicht überrascht sein, wenn toString Änderungen in einer Weise, die Sie unglücklich machen.

Nach meiner Erfahrung toString () hat wenig Wert außerhalb des Debugging und Protokollierung. Sie können nicht davon abhängen Format oder Inhalt im Laufe der Zeit ist, so anders als menschliches lesbar ist, hängen nicht von ihm für etwas anderes als die einfachstenen Objekte (wie die primitiven Objekttypen). Wenn mehrere Datenelemente sind, erwarten sie in Art oder Anzahl im Laufe der Zeit ändern können, und die Ausgabe des toString () mit.

Ein weiterer Punkt Ich mag würde zu stark machen. Verwenden Sie keine anderen Methoden in der toString () aufrufen. Nichts ist schlimmer als die variablen Inhalte auf einem Haltepunkt im Debugger überprüft, und dann mehr Code ausgeführt werden, da die Methodenaufrufe in der toString ().

Ich denke, dass es wichtig ist, die die Menschen darauf hin, die „toString“ bemerkt die kleinen „t“ spricht im Allgemeinen über Java beantwortet zu erwähnen, und die Leute, die zu erwähnen „ToString“ beantwortet werden in der Regel über C #. Natürlich gilt dies nicht für alle Antworten.

In meiner eigenen Beobachtung (ich sowohl die täglichen Gebrauch), Programmierer in C # werden ermutigt, außer Kraft zu setzen „ToString“ eine nützliche Textdarstellung angezeigt werden soll. Während in Java, ich dies nicht annähernd so viel sehen. In der Tat, ich sehe dies selten.

-JP

Zunächst sollte die toString Methode eine für Menschen lesbare Textdarstellung des Objekts zurück.

Dieses Problem wird gebracht in Effective Java als Artikel 10 :. außer Kraft setzen immer toString

Es verweist auf die Java API-Spezifikation für die Object.toString Methode:

  

Das Ergebnis sollte eine kurze, aber   informative Darstellung, die ist   einfach für eine Person zu lesen.

Neben Debugging, das Überschreiben der toString Methode einer Klasse kann nützlich sein, wenn Objekte in ein JList oder ein JTable , die standardmäßig die toString Methode verwenden, um das Objekt als Textform in der Liste oder Tabelle angezeigt werden soll.

Zum Beispiel in meinem Fall habe ich die toString Methode von Objekten außer Kraft gesetzt, die zu einem JList hinzugefügt werden, so dass der Benutzer in der Lage sein wird, Informationen über das Element in einer Liste über die GUI zu sehen.

So gibt es in der Tat Fälle, in denen die toString Methode für andere Fälle als Debuggen nützlich ist. Der Schlüssel ist die toString Methode Rückkehr Informationen zu haben, die wirklich nützlich für eine Person zu sehen, nicht die Standard-Object.toString Implementierung, bei dem Speicherplatz des Objekts ist für seine Textdarstellung verwendet wird.

Nützlich für

  1. Gui (komplexe Eigenschaft, wenn Sie Property, Formularkopftext verwenden)
  2. Databinding (das ist die Art und Weise, wie es funktioniert)

Und andere Zeichenfolge ausgegeben.

ToString () auch durch das .NET Framework aufgerufen wird, implizit, wenn aus in eine Zeichenfolge ein beliebiges Objekt gedruckt wird.

Console.WriteLine("My Object is" + object.ToString());

entspricht

Console.WriteLine("My Object is" + object);

, weil der ToString () wird implizit aufgerufen.

Ich glaube, wenn ich nicht sicher, dass es durch den Debugger für den „Wert“ eines Objekts verwendet wird. Dies kann recht praktisch, wenn auch begrenzt werden. In den meisten Fällen Ihren eigenen Debugger Visualizer zu schreiben wäre eine bessere Idee.

Auf AS3, ich hatte einen 2D-Array in eine 1D-Array zu konvertieren. Die schnellste (Laufgeschwindigkeit) und einfachste (Codierung Zeit) Lösung war:

var new1DArray:Array = the2DArray.toString().split(",");

Lassen Sie sich überraschen, aber es funktioniert tatsächlich wie beabsichtigt und recht schnell, auch!

Ich benutze ToString () eine Tonne für Datetime-Formate.

http://hunterconcepts.com/content/tools/formats/

Abgesehen von dem, was alle anderen schon gesagt hat, überschreibt ToString () ist auch nützlich, wenn Kontrollen verwenden, die es nennen. Zum Beispiel kann ein ComboBox:

myComboBox.Items.Add(new MyClass());
// now, whatever ToString() returns is shown in the
// ComboBox, but you can get the object back by through
// the SlectedItem property.

es ist vielleicht nicht die „beabsichtigt“ Gebrauch sein, aber ich habe es für Datenserialisierung verwendet

storeToHardDrive(studentList.ToString());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top