2012-05-24 11 views
53

Brzmi trochę głupio, ale potrzebuję pomocy w mojej metodzie toString() i to jest bardzo irking. Próbowałem wyszukiwać w Internecie, ponieważ toString jest tym, w którym jest to zepsute i "nie znajduje konstruktora Kid # 2", mimo że jest tam i chciałbym nawet zrobić coś innego i to nie działa. Ok to było dużo, więc tutaj jest mój kod:Jak poprawnie przesłonić toString() w Javie?

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 Więc moja toString powyżej (wiem, mój trzeci parametr jest wyłączony, powinno być String) jest wyłączony. Jeśli utknę wartość na trzecią rzecz, to się zepsuje i mówi, że nie może tego znaleźć (wyżej). Więc jak mogę uzyskać datę i rozbić?

Klasa nazywając to poniżej

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 

Próbowałem badania wielu konstruktorów i to naprawdę nie pomaga. Próbowałem badać metody toString() i próbowałem użyć poprzedniej logiki metod toString(), które stworzyłem wcześniej, ale jest to zupełnie nowe, więc nigdy nie działało.

Pomoc?

+3

Proszę napisać kod, który faktycznie by się skompilował. Twoja metoda 'toString()' nie zwraca łańcucha i nie można wywołać takiego konstruktora. Nie jest jasne, co nawet próbujesz osiągnąć. Przeczytaj http://tinyurl.com/so-hints i wyjaśnij swoje pytanie. –

+0

Spring ToStringCreator (https://github.com/SpringSource/spring-framework/tree/master/spring-core/src/main/java/org/springframework/core/style) wykonuje to zadanie bardzo ładnie. – Ritesh

Odpowiedz

84

Urządzenie toString ma zwrócić wartość String.

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

Proponuję skorzystać z funkcji IDE do generowania metody toString. Nie koduj go ręcznie.

Na przykład, Eclipse może to zrobić, jeśli po prostu kliknij prawym przyciskiem myszy na kodzie źródłowym i wybierz Source > Generate toString

+1

dzięki! bardzo pomogło! – user1283885

+0

To nie jest dobra praktyka, ponieważ używasz łączenia ciągów. – Amit

+0

StringBuilder to lepszy wybór w takiej sytuacji. – Amit

4

Można tworzyć nowy obiekt w toString(). używać

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

zamiast

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

można zmienić ciąg zwrotny w razie potrzeby. Istnieją inne sposoby przechowywania daty zamiast kalandra.

3

Nie można wywołać konstruktora jakby to był normalny sposób, można tylko nazwać z new aby utworzyć nowy obiekt:

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

Ale budowy nowego obiektu z metody toString() nie jest to, co chcesz robić.

1

Poniższy kod jest próbką. Pytanie oparte na tym samym, zamiast używać konwersji opartej na IDE, czy istnieje szybszy sposób wdrożenia, aby w przyszłości nastąpić zmiany, nie musimy ciągle zmieniać wartości?

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

Java toString() metoda

Jeśli chcesz reprezentować dowolny obiekt jako ciąg, metoda toString() powstaje.

Metoda toString() zwraca ciąg znaków reprezentujący obiekt.

W przypadku drukowania dowolnego obiektu kompilator języka Java wewnętrznie wywołuje metodę toString() obiektu.Tak więc przesłonięcie metody toString() zwraca żądane wyjście, może to być stan obiektu itp. Zależy od implementacji.

Zaletą Java toString() metoda

nadrzędnymi metodę toString() z klasy Object, możemy powrócić wartości obiektu, więc nie trzeba pisać dużo kodu.

Wyjście bez metody toString()

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] 

można zobaczyć w powyższym przykładzie # 1. drukowanie s1 i s2 drukuje wartości Hashcode obiektów, ale chcę wydrukować wartości tych obiektów. Ponieważ kompilator java wewnętrznie wywołuje metodę toString(), przesłonięcie tej metody zwróci określone wartości. Załóżmy, zrozumieć na przykładzie podanym poniżej:

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 

Zauważ, że toString() najczęściej związane jest z koncepcją polimorfizmu w Javie. W, Eclipse, spróbuj kliknąć na ToString() i kliknij prawym przyciskiem myszy. Następnie kliknij Otwórz deklarację i zobacz, skąd pochodzi Superklasa toString().

1

No faktycznie trzeba będzie powrócić coś takiego ponieważ toString musi zwracać ciąg

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

i rzeczywiście zrobić coś złego w constructer ustawić zmienną użytkownik określa nazwę, podczas gdy trzeba robić odwrotnie. Czego nie należy robić

n = this.name 

Co należy zrobić

this.name = n 

Hopes to pomaga dzięki

1

możemy nawet pisać tak, tworząc nowy obiekt String w klasie i przypisywanie to, czego chcemy w konstruktorze i zwracamy, to w metodzie toString, która jest nadpisywana

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() 
} 
} 
Powiązane problemy