Как правильно переопределить toString () в Java?


звучит немного глупо, но мне нужна помощь на моем toString() метод и это очень раздражает. Я попытался посмотреть онлайн, потому что toString Это тот, где он облажался и "не нашел конструктор Kid #2", хотя он есть, и я бы даже сделал что-то еще, и это не работает. Хорошо, что было много так вот мой код:

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() методы логики, которые я создал ранее, но это совершенно новый, так что он никогда не работал.

помочь?

7 63

7 ответов:

The toString должен вернуть a String.

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

Я предлагаю вам использовать функции вашей IDE для создания toString метод. Не кодируйте его вручную.

например, Eclipse может сделать это, если вы просто щелкните правой кнопкой мыши на исходном коде и выберите Source > Generate toString

Java toString () метод

Если вы хотите представить любой объект в виде строки, метод toString () появляется.

метод toString() возвращает строковое представление объекта.

Если вы печатаете какой-либо объект, компилятор java внутренне вызывает метод toString() на объекте. Поэтому переопределив метод toString() возвращает желаемый результат, это может быть состояние объекта и т. д. зависит от вашего реализация.

преимущество метода Java toString ()

переопределяя метод toString () класса Object, мы можем возвращать значения объекта, поэтому нам не нужно писать много кода.

вывод без метода 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:Student@2kaa9dc
       Student@4bbc148

Вы можете видеть в приведенном выше примере #1. печать s1 и s2 печатает значения хэш-кода объектов, но я хочу распечатать значения этих объектов. Поскольку компилятор java внутренне вызывает метод 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

обратите внимание, что toString() в основном связан с понятием полиморфизма в Java. В Eclipse, попробуйте нажать на toString () и щелкните правой кнопкой мыши на нем.Затем нажмите на Open Declaration и посмотрите, откуда берется суперкласс toString ().

Вы можете создать новый объект в toString(). используйте

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

вместо

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

вы можете изменить возвращаемую строку по мере необходимости. Есть и другие способы хранения даты вместо каландра.

вы не можете вызвать конструктор, как если бы это был обычный метод, вы можете вызвать его только с помощью new чтобы создать новый объект:

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

но строительство нового объекта из метода toString() не то, что вы хотите делать.

следующий код является образец. Вопрос, основанный на том же, вместо использования преобразования на основе IDE, есть ли более быстрый способ реализации, чтобы в будущем произошли изменения, нам не нужно снова и снова изменять значения?

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

ну на самом деле вам нужно будет вернуть что-то вроде этого, потому что toString должен вернуть строку

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

и вы на самом деле делаете что-то неправильно в конструкторе вы устанавливаете переменную, которую пользователь установил на имя, в то время как вам нужно сделать наоборот. То, что вы не должны делать

n = this.name

что нужно делать

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