Java Methode toString()?

8 Antworten

toString() ist dafür gedacht, eine [für Menschen] auswertbare Repräsentation eines Objektes zurückzugeben. Stell dir das so vor, in Pseudo-Code:

public class MyClass {
    private int number;
    private bool checked;
    private string identifier;

    public override string toString(){
        return "MyClass [identifier="+identifier+",number="+number+",checked="+checked+"]";
    }
}

Einsetzen solltest du das, wenn du ein Objekt beispielsweise in der Console ausgeben möchtest, denn dafür benötigt es einen Zeichenrepräsentation. Aus einem Wahrheitswert (bool) wird beispielsweise "true"/"false", obwohl das natürlich auf tieferer Ebene nicht so aussieht, da steht das nicht so wortwörtlich mit Zeichen da.

Ich würde gerne wissen, was der "Sinn" der Methode toString() genau ist?

Der Sinn dieser Methode ist es, eine String-Repräsentation des jeweiligen Objektes zu erhalten.

Nimm z.B. mal eine Klasse zur Verwaltung von XML-Elementen.

toString() würde in dem Fall z.B. eine Repräsentation des Objektes zurückgeben, die direkt in eine XML-Datei geschrieben werden kann.

Welche Vorteile hat die toString() Methode?

Vorteile verglichen mit was?

Ohne einen Vergleichswert ist die Frage nach Vor- und/oder Nachteilen völlig sinnlos.

Und welchen Wert würde die toString() Methode ausgeben, wenn man sie nicht überschreiben würde?

Üblicherweise eine String-Darstellung der Speicheradresse des betreffenden Objektes.

Und wann muss ich das einsetzen?

Müssen: Gar nicht.

Sollten: Da, wo es Sinn ergibt.

Die toString()-Methode hat den Vorteil, dass sie standardmäßig bei jedem Objekt vorhanden ist und von verschiedenen anderen Funktionen genutzt und beim Compilieren implizit aufgerufen wird.

Wenn du sie nicht überschreibst, dann wird in der Regel der Objektbezeichner ausgegeben.

Einsetzen musst du das an sich nie, außer du willst das Feature davon für irgendetwas nutzen.

Der Hauptsinn ist, für jedes Objekt eine Darstellung für Textausgaben zu haben. Besonders für "Logs" (Mitschriften, was das Programm so tut) kann man sich dann darauf verlassen, dass irgendeine Textrepräsentation existiert, die man dann hinschreiben kann.

Vorteil: gegenüber wem?

Default- Implementierung: Klassenname und Speicheradresse (oder sonst ein eindeutiger Identifikator).

Einsatz des Aufrufs: wie gesagt z. B. bei Logs.

Einsatz der eigenen Implementierung: immer, wenn eine andere als die Ausgabe der Standard-Implementierung sinnvoll ist (also wenigstens bei praktisch allen öffentlichen Klassen). Z. B. bei einer Klasse "Auto" statt "de.example.project.my.stuff.Auto@2a991ce3" "roter Golf GTI (233 PS)"

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Wenn die toString() Methode nicht überschrieben wurde gibt sie einen String zurück, der Klassennamen und den Hashcode als Hexadezimale enthält.

public String toString()
{
      return getClass().getName()+"@"+Integer.toHexString(hashCode());
}

Der "Sinn" dieser Methode ist es, zu ermöglichen, dass es zu jedem Objekt eine String Repräsentation gibt.

LG

Woher ich das weiß:Studium / Ausbildung – Gelernter Fachinformatiker, Freiberufl. Softwareentwickler