Java toString方法中应该包括哪些内容,不应该包括哪些内容?

Java toString方法中应该包括哪些内容,不应该包括哪些内容?,java,tostring,Java,Tostring,有人告诉我,这是一个糟糕的toString方法,因为它应该在一行上输出诊断信息,或者在有意义的情况下输出一个文本值。我真的不明白。我是否应该打印所有实例变量并让用户决定它是什么 问题是这个toString会产生一大块代码。让我们说它叫学生。如果要登录,请执行以下操作: public String toString() { String info = ""; String courseInfo = this.getCourseInfo();

有人告诉我,这是一个糟糕的toString方法,因为它应该在一行上输出诊断信息,或者在有意义的情况下输出一个文本值。我真的不明白。我是否应该打印所有实例变量并让用户决定它是什么

问题是这个toString会产生一大块代码。让我们说它叫学生。如果要登录,请执行以下操作:

    public String toString() {
        String info = "";
        String courseInfo = this.getCourseInfo();
        if("".equals(courseInfo)) {
            courseInfo = "None";
        }

        info += "--------------------------------------------------\n";
        info += "Student Name: " + this.name + "\n";
        info += "Student Address: " + this.address + "\n"; 
        info += "Student #: " + this.studentNumber + "\n";
        info += "Student Login ID: " + this.loginID + "\n";
        info += "Courses taken:" + "\n";
        info += courseInfo + "\n";
        info += "GPA: " + this.getGPA() + "\n";
        info += "--------------------------------------------------\n";

        return info;
    }
然后X和Y会变得巨大,整条线会被分开,无法阅读


您可能有一个“toFullDescription”或类似于当前toString的方法,但toString应该只有几个有意义的元素,可能只有花括号内的名称和Id。

问题是,此toString将生成一大块代码。让我们说它叫学生。如果要登录,请执行以下操作:

    public String toString() {
        String info = "";
        String courseInfo = this.getCourseInfo();
        if("".equals(courseInfo)) {
            courseInfo = "None";
        }

        info += "--------------------------------------------------\n";
        info += "Student Name: " + this.name + "\n";
        info += "Student Address: " + this.address + "\n"; 
        info += "Student #: " + this.studentNumber + "\n";
        info += "Student Login ID: " + this.loginID + "\n";
        info += "Courses taken:" + "\n";
        info += courseInfo + "\n";
        info += "GPA: " + this.getGPA() + "\n";
        info += "--------------------------------------------------\n";

        return info;
    }
然后X和Y会变得巨大,整条线会被分开,无法阅读


你可能有一个“toull描述”或者一些看起来像你当前的ToStand的方法,但是ToScript应该只有一些有意义的元素,可能只是括号内的名字和ID。

< p>你把任何你认为与对象相关的信息放在字符串中。它对于调试目的非常重要,例如IDE中的日志文件或调试会话。此外,当试图识别应用程序中的问题时,写入日志的toString对象中的信息对于取证非常有用

不过,您可能会尽量避免将敏感信息(如密码、信用卡号码等)放在那里

我喜欢用这个来做这类事情。它为您的toString提供了不同的格式样式,使您的生活更简单

例如:

Student X linked to student Y because of Z.

<>你把你认为与对象相关的任何信息都串起来。它对于调试目的非常重要,例如IDE中的日志文件或调试会话。此外,当试图识别应用程序中的问题时,写入日志的toString对象中的信息对于取证非常有用

不过,您可能会尽量避免将敏感信息(如密码、信用卡号码等)放在那里

我喜欢用这个来做这类事情。它为您的toString提供了不同的格式样式,使您的生活更简单

例如:

Student X linked to student Y because of Z.

从javadoc:
返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于一个人阅读。
@Sotirios Delimanolis这是我真正不理解的,toString方法不是信息丰富吗?我认为这个人的问题在于
简洁
易读
部分。我的意思是,答案是“视情况而定”。也就是说,您通常不会以格式化输出的方式使用它,但在某些情况下这是有意义的(例如,JSON解析器可能会在其解析树类中重写
toString()
,以输出格式化的JSON),我希望通过一个要求这种格式的参数。我还将从每个成员变量都应该有自己的贡献字符串方法的角度来看它。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于一个人阅读。@Sotirios Delimanolis这是我真正不理解的,toString方法不是信息丰富吗?我认为这个人的问题在于
简洁
易读
部分。我的意思是,答案是“视情况而定”。也就是说,您通常不会以格式化输出的方式使用它,但在某些情况下这是有意义的(例如,JSON解析器可能会在其解析树类中重写
toString()
,以输出格式化的JSON),我希望通过一个要求这种格式的参数。我也会从每个成员变量都应该有自己的贡献字符串方法的角度来看它,所以我应该生成一个类似数组的格式?比如{name:“XXX”,address:“XXX”}???@Joshua你可以做任何你想做的事。没有正式的惯例。只是不要在日志输出中使用“与其他人玩得不好”的多行。@Joshua是的,这将是一个很好的方法。没有“规则”,但这是一个体面的方法。您的IDE(例如netbeans)可能有一个工具可以为您生成一个好的toString,所以我应该只生成一个类似数组的格式?比如{name:“XXX”,address:“XXX”}???@Joshua你可以做任何你想做的事。没有正式的惯例。只是不要在日志输出中使用“与其他人玩得不好”的多行。@Joshua是的,这将是一个很好的方法。没有“规则”,但这是一个体面的方法。您的IDE(例如netbeans)可能有一个工具为您生成一个好的toString。