如何在 Java 中正确覆盖 toString()?

新手上路,请多包涵

听起来有点愚蠢,但我的 toString() 方法需要帮助,这很烦人。我试着在网上查找,因为 toString 是它搞砸了的地方,“找不到 Kid constructor #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() 方法逻辑,但这是全新的,所以它从未奏效。

帮助?

原文由 user1283885 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 406
2 个回答

toString 应该返回 String

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

我建议您利用 IDE 的功能来生成 toString 方法。不要手动编码。

例如,如果您只需右键单击源代码并选择 Source > Generate toString ,Eclipse 就可以这样做

原文由 adarshr 发布,翻译遵循 CC BY-SA 3.0 许可协议

Java toString() 方法

如果你想将任何对象表示为字符串,toString() 方法应运而生。

toString() 方法返回对象的字符串表示形式。

如果打印任何对象,java 编译器会在内部调用该对象的 toString() 方法。因此,重写 toString() 方法,返回所需的输出,它可以是对象的状态等,具体取决于您的实现。

Java 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: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() 的来源。

原文由 Linux Le 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题