2012-05-24 2 views
53

조금 어리 석었지만 내 toString() 메서드에 대한 도움이 필요합니다. toString은 엉망이되어 "Kid constructor # 2를 찾지 못해"toString이 있기 때문에 온라인으로 검색해 보았습니다.하지만 거기에 있어도 뭔가 다른 작업을 수행하더라도 작동하지 않습니다. 좋아 그 많은 그래서 여기에 있었다 내 코드는 다음과 같습니다Java에서 toString()을 올바르게 재정의하려면 어떻게해야합니까?

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 

좋아 위 내 toString 그래서 꺼져 (내가 알고, 내 세 번째 매개 변수가 꺼져, 문자열이 있어야한다). 세 번째로 값을 하드 코딩하면 코드가 달라지며 위 (위로)를 찾을 수 없다고합니다. 그러면 어떻게 날짜를 구하고 깨뜨릴 수 있습니까? 나는 여러 생성자를 연구 시도하고 정말 도움이되지 않았다

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 

다음은이 호출

클래스입니다. toString() 메서드를 조사해 보았습니다. 이전에 만든 toString() 메서드 논리를 사용하여 시도했지만 이전에는 사용하지 않았으므로 완전히 새로운 것입니다.

도움 말?

+3

실제로 컴파일 할 코드를 게시하십시오. 귀하의'toString()'메소드는 문자열을 반환하지 않으므로 이와 같은 생성자를 호출 할 수 없습니다. 당신이 달성하고자하는 것이 무엇인지는 분명하지 않습니다. http://tinyurl.com/so-hints를 읽고 질문을 명확히하십시오. –

+0

Spring의 ToStringCreator (https://github.com/SpringSource/spring-framework/tree/master/spring-core/src/main/java/org/springframework/core/style)는 매우 능숙합니다. – Ritesh

답변

84

toStringString을 반환해야합니다.

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

toString 메서드를 생성하기 위해 IDE의 기능을 사용하는 것이 좋습니다. 그것을 직접 코딩하지 마십시오. 당신은 단순히 소스 코드를 마우스 오른쪽 버튼으로 클릭하고 당신은 된 toString 새로운 객체를 생성 할 수 Source > Generate toString

+1

감사합니다! 많은 도움이되었습니다! – user1283885

+0

이것은 문자열 연결을 사용하기 때문에 좋지 않습니다. – Amit

+0

StringBuilder는 이러한 상황에서 더 나은 선택입니다. – Amit

4

을 선택하면

예를 들어, 이클립스는 그렇게 할 수 있습니다(). 필요에 따라

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

대신

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

를 사용 당신은 반환 문자열을 변경할 수 있습니다. calander 대신에 날짜를 저장하는 다른 방법이 있습니다.

가 정상적인 방법 인 것처럼 당신은 생성자를 호출 할 수 없습니다
3

, 당신은 단지 새로운 객체 생성 new로 호출 할 수 있습니다 :

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

을하지만 당신의 toString() 메소드에서 새 개체를 구성하는 네가하고 싶은게 아니야.

1

다음 코드는 샘플입니다. 질문을 기반으로 IDE 기반 변환 대신 IDE를 사용하는 것이 더 빨리 구현 될 수 있으므로 나중에 변경 사항이 발생하기 때문에 값을 반복해서 수정할 필요가 없습니다.

당신이 문자열로 개체를 표현하려면

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

자바 toString() 메소드는, toString() 메소드는 존재로 제공됩니다.

toString() 메서드는 객체의 문자열 표현을 반환합니다.

개체를 인쇄하면 Java 컴파일러는 개체에서 내부적으로 toString() 메서드를 호출합니다.따라서 toString() 메서드를 재정 의하여 원하는 출력을 반환합니다. 객체의 상태 등이 구현에 따라 다를 수 있습니다. 자바 toString() Object 클래스의 toString() 메서드를 재정 의하여 방법

장점, 우리는 개체의 값을 반환 할 수 있습니다, 그래서 우리는 많은 코드를 작성할 필요가 없습니다. 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] 

당신은 1 위의 예 번호를 볼 수 있습니다. s1과 s2를 인쇄하면 개체의 해시 코드 값이 인쇄되지만 이러한 개체의 값을 인쇄하려고합니다. Java 컴파일러는 내부적으로 toString() 메서드를 호출하므로이 메서드를 재정의하면 지정된 값이 반환됩니다. 이제 아래의 예제를 이해하자 의하여 toString() 주로 자바에서 다형성의 개념과 관련이 있음을

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 

참고. Eclipse에서 toString()을 클릭하고 마우스 오른쪽 버튼을 클릭하십시오. Open Declaration을 클릭하고 Superclass toString()이 어디에서 왔는지 확인하십시오. toString 문자열을

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

을 반환해야하고 실제로 constructer에서 뭔가 잘못을하기 때문에

1

그럼 실제로 당신은 당신이 당신이 필요로하는 동안 사용자 이름으로 설정 변수 설정과 같은 뭔가를 반환해야합니다 그 반대. 당신이하지 말아야 할 무엇

n = this.name 

이 클래스에 새로운 String 객체를 생성하고 할당하여 우리도 같이 쓸 수 있습니다 감사

1

을하는 데 도움이

this.name = n 

희망을 어떻게해야합니까 우리가 생성자에서 원하는 것을 이제까지 오버라이드 된 toString 메서드에서 반환 할 것입니다.

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() 
} 
} 
관련 문제