2012-05-24 12 views
53

Suena un poco estúpido, pero necesito ayuda con mi método toString() y es muy molesto. Intenté buscar en línea porque toString es el que está jodiendo y "no encuentra al constructor Kid # 2" aunque esté allí e incluso haría algo más y no funciona. Ok que era mucho, así que aquí es mi código:¿Cómo sobrescribir toString() correctamente en 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 Así que mi toString anterior (lo sé, mi tercer parámetro está desactivado, debe ser una cadena) está apagado. Si codigo un valor para el tercero, se vuelve loco y dice que no puede encontrarlo (arriba). Entonces, ¿cómo puedo obtener la fecha y romperla?

Clase llamar a este se encuentra por debajo

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 

intenté investigar varios constructores y realmente no ayudó. Intenté investigar los métodos de String() y traté de usar la lógica anterior de los métodos toString() que creé anteriormente, pero esto es completamente nuevo, así que nunca funcionó.

¿Ayuda?

+3

Por favor, publique el código que realmente compilaría. Su método 'toString()' no devuelve una cadena, y no puede llamar a un constructor así. No está claro lo que estás tratando de lograr. Por favor, lea http://tinyurl.com/so-hints y aclare su pregunta. –

+0

The Spring's ToStringCreator (https://github.com/SpringSource/spring-framework/tree/master/spring-core/src/main/java/org/springframework/core/style) hace el trabajo muy bien. – Ritesh

Respuesta

84

Se supone que el toString devuelve un String.

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

le sugiero que haga uso de las funciones del IDE para generar el método toString. No lo codifique a mano.

Por ejemplo, Eclipse puede hacerlo si simplemente haga clic en el código fuente y seleccionar Source > Generate toString

+1

gracias! ayudó mucho! – user1283885

+0

Esta no es una buena práctica, ya que está utilizando la concatenación de cadenas. – Amit

+0

StringBuilder es una mejor opción en tal situación. – Amit

4

Puede crear un nuevo objeto en el toString(). utilizar

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

en lugar de

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

Es posible cambiar la cadena de retorno cuando sea necesario. Hay otras maneras de almacenar la fecha en lugar de calander.

3

no puede llamar a un constructor como si fuera un método normal, sólo se puede llamar con new para crear un nuevo objeto:

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

Pero la construcción de un nuevo objeto de su método toString() no es lo que quieres hacer

1

El siguiente código es una muestra. Pregunta basada en lo mismo, en lugar de utilizar la conversión basada en IDE, ¿existe una forma más rápida de implementarla para que en el futuro se produzcan los cambios, no es necesario que modifiquemos los valores una y otra vez?

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

Java método toString()

Si desea representar cualquier objeto como una cadena, el método toString() entra en existencia.

El método toString() devuelve la representación de cadena del objeto.

Si imprime cualquier objeto, el compilador java invoca internamente el método toString() en el objeto.Así que anulando el método toString(), devuelve el resultado deseado, puede ser el estado de un objeto, etc. depende de su implementación.

ventaja del método de

reemplazando el método toString() de la clase Object toString (Java), podemos valores del objeto devolver, por lo que no tenga que escribir mucho código.

de salida sin método 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] 

se puede ver en el ejemplo anterior 1 #. la impresión s1 y s2 imprime los valores Hashcode de los objetos, pero quiero imprimir los valores de estos objetos. Como el compilador java llama internamente al método String(), anulando este método devolverá los valores especificados. Vamos a entender que con el ejemplo dado a continuación:

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 

Tenga en cuenta que toString() en su mayoría se relaciona con el concepto de polimorfismo en Java. En, Eclipse, intente hacer clic en toString() y haga clic derecho sobre él. Luego, haga clic en Abrir declaración y vea de dónde viene la Superclase toString().

1

Bueno, en realidad tendrá que devolver algo como esto porque toString tiene que devolver una cadena

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

y que realmente haga algo mal en el constructer se establece la variable que el usuario establece en el nombre, mientras que lo que necesita hacer lo opuesto Lo que no debe hacer

n = this.name 

Lo que debe hacer

this.name = n 

espera que esta ayuda gracias

1

incluso podemos escribir como esto mediante la creación de un nuevo objeto String en la clase y la asignación es lo que queramos en el constructor y lo devolvemos en el método toString que está anulado

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() 
} 
} 
Cuestiones relacionadas