2012-05-24 24 views
53

Klingt ein bisschen dumm, aber ich brauche Hilfe bei meiner toString() -Methode und es ist sehr ärgerlich. Ich habe versucht, online nachschlagen, weil der toString ist derjenige, wo es vermasselt und "Kid Konstruktor # 2" nicht finden, obwohl es da ist, und ich würde sogar etwas anderes tun und es funktioniert nicht. Ok, das war viel so hier ist mein Code:So überschreiben Sie toString() ordnungsgemäß in Java?

import java.util.*; 
    class Kid { 
     String name; 
     double height; 
     GregorianCalendar bDay; 

     public Kid() { 
     this.name = "HEAD"; 
     this.height = 1; 
     this.bDay = new GregorianCalendar(1111,1,1); 
     } 

     public Kid (String n, double h, String date) { 
     // method that toString() can't find somehow 
     StringTokenizer st = new StringTokenizer(date, "/", true); 
     n = this.name; 
     h = this.height; 
     } 

     public String toString() { 
     return Kid(this.name, this.height, this.bDay); 
     } 
    } //end class 

Ok Also mein toString oben (ich weiß, mein dritte Parameter ausgeschaltet ist, sollte ein String sein) ausgeschaltet ist. Wenn ich einen Wert für die dritte Sache festcode, geht es drunter und drüber und sagt, dass es das nicht finden kann (oben). Wie kann ich das Datum bekommen und es aufteilen?

Klasse dieser Aufruf ist unter

class Driver { 
    public static void main (String[] args) { 
     Kid kid1 = new Kid("Lexie", 2.6, "11/5/2009"); 
     System.out.println(kid1.toString()); 
    } //end main method 
} //end class 

ich mehrere Konstrukteure versucht, die Erforschung und es half nicht wirklich. Ich habe versucht, toString() -Methoden zu recherchieren, und habe versucht, vorherige toString() - Methodenlogik zu verwenden, die ich vorher erstellt habe, aber das ist brandneu, also hat es nie funktioniert.

Hilfe?

+3

Bitte schreiben Sie Code, der tatsächlich kompiliert werden würde. Ihre Methode 'toString()' gibt keine Zeichenfolge zurück, und Sie können keinen Konstruktor wie diesen aufrufen. Es ist unklar, was Sie überhaupt erreichen wollen. Bitte lesen Sie http://tinyurl.com/so-hints und klären Sie Ihre Frage. –

+0

Der Spring ToStringCreator (https://github.com/SpringSource/spring-framework/tree/master/spring-core/src/main/java/org/springframework/core/style) macht den Job sehr gut. – Ritesh

Antwort

84

Die toString soll eine String zurückgeben.

public String toString() { 
    return "Name: '" + this.name + "', Height: '" + this.height + "', Birthday: '" + this.bDay + "'"; 
} 

Ich schlage vor, Sie von Ihrem IDE-Funktionen machen das toString Verfahren zu erzeugen. Hand-Code nicht.

Zum Beispiel können Eclipse-so tun, wenn Sie einfach mit der rechten Maustaste auf den Quellcode und wählen Source > Generate toString

+1

danke! hat sehr geholfen! – user1283885

+0

Dies ist keine gute Übung, da Sie String-Verkettung verwenden. – Amit

+0

StringBuilder ist eine bessere Wahl in einer solchen Situation. – Amit

4

Sie können in der toString neue Objekt erstellen(). verwenden

return "Name = " + this.name +" height= " + this.height; 

statt

return Kid(this.name, this.height, this.bDay); 

Sie können die Rückgabestring nach Bedarf ändern. Es gibt andere Möglichkeiten, um Datum statt Kalender zu speichern.

3

Sie können einen Konstruktor aufrufen, als ob es sich um eine normale Methode war, kann man nur nennen es mit new ein neues Objekt zu erstellen:

Kid newKid = new Kid(this.name, this.height, this.bDay); 

Aber ein neues Objekt aus Ihrer Methode toString() Konstruieren ist nicht das, was du machen willst.

1

Der folgende Code ist ein Beispiel. Frage basierend auf dem gleichen, anstatt mit IDE-basierten Konvertierung, gibt es eine schnellere Möglichkeit zu implementieren, so dass in Zukunft die Änderungen auftreten, müssen wir die Werte nicht immer wieder ändern?

@Override 
    public String toString() { 
     return "ContractDTO{" + 
       "contractId='" + contractId + '\'' + 
       ", contractTemplateId='" + contractTemplateId + '\'' + 
       '}'; 
    } 
6

Java toString() -Methode

Wenn Sie ein beliebiges Objekt als String darstellen wollen, toString() -Methode kommt zustande.

Die toString() -Methode gibt die Zeichenfolgendarstellung des Objekts zurück.

Wenn Sie ein Objekt drucken, ruft der Java-Compiler intern die Methode toString() für das Objekt auf.Wenn Sie also die toString() -Methode überschreiben, wird die gewünschte Ausgabe zurückgegeben. Dies kann der Status eines Objekts usw. sein. Dies hängt von Ihrer Implementierung ab.

Vorteil von Java toString() -Methode

durch Überschreiben der Methode toString() der Object-Klasse, können wir Werte des Objekts zurückgeben, so brauchen wir nicht viel Code zu schreiben.

Ausgabe ohne toString() -Methode

class Student{ 
int id; 
String name; 
String address; 

Student(int id, String name, String address){ 
this.id=id; 
this.name=name; 
this.address=address; 
} 

public static void main(String args[]){ 
    Student s1=new Student(100,”Joe”,”success”); 
    Student s2=new Student(50,”Jeff”,”fail”); 

    System.out.println(s1);//compiler writes here s1.toString() 
    System.out.println(s2);//compiler writes here s2.toString() 
} 
} 

Output:[email protected] 
     [email protected] 

Sie können 1 im obigen Beispiel # sehen. Drucken s1 und s2 druckt die Hashcode-Werte der Objekte, aber ich möchte die Werte dieser Objekte drucken. Da der Java-Compiler intern die Methode toString() aufruft, gibt das Überschreiben dieser Methode die angegebenen Werte zurück. Lassen Sie uns verstehen, ist es mit dem Beispiel unten angegeben:

Example#2 

Output with overriding toString() method 

class Student{ 
int id; 
String name; 
String address; 

Student(int id, String name, String address){ 
this.id=id; 
this.name=name; 
this.address=address; 
} 

//overriding the toString() method 
public String toString(){ 
    return id+" "+name+" "+address; 
} 
public static void main(String args[]){ 
    Student s1=new Student(100,”Joe”,”success”); 
    Student s2=new Student(50,”Jeff”,”fail”); 

    System.out.println(s1);//compiler writes here s1.toString() 
    System.out.println(s2);//compiler writes here s2.toString() 
} 
} 

Output:100 Joe success 
     50 Jeff fail 

Beachten Sie, dass toString() meist auf das Konzept des Polymorphismus in Java in Zusammenhang steht. In Eclipse versuchen Sie, auf toString() zu klicken und mit der rechten Maustaste darauf zu klicken. Klicken Sie dann auf Open Declaration und sehen Sie, woher die Superklasse toString() kommt.

1

Naja, eigentlich müssen Sie so etwas wie dies zurück, weil toString eine Zeichenfolge

public String toString() { 
return "Name :" + this.name + "whatever :" + this.whatever + ""; 
} 

zurückzukehren hat, und Sie tun wirklich etwas falsch in der constructer setzen Sie die Variable der Benutzer auf den Namen gesetzt, während Sie brauchen das Gegenteil tun. Was Sie nicht tun sollten

n = this.name 

Was sollten Sie

this.name = n 

Hopes tun dies hilft dank

1

wir so noch schreiben kann, indem ein neues String-Objekt in der Klasse erstellen und zuweisen was immer wir wollen in Konstruktor und geben Sie das in toString Methode, die überschrieben wird

public class Student{ 
int id; 
String name; 
String address; 
String details; 
Student(int id, String name, String address){ 
this.id=id; 
this.name=name; 
this.address=address; 
this.details=id+" "+name+" "+address; 
} 

//overriding the toString() method 
public String toString(){ 
    return details; 
} 
public static void main(String args[]){ 
    Student s1=new Student(100,"Joe","success"); 
    Student s2=new Student(50,"Jeff","fail"); 

    System.out.println(s1);//compiler writes here s1.toString() 
    System.out.println(s2);//compiler writes here s2.toString() 
} 
} 
Verwandte Themen