为什么在DTO中覆盖toString方法

时间:2011-06-24 13:32:28

标签: java

我看到DTO对象中的大部分时间, toString方法被重新覆盖。

例如:

public class Person implements Serializable {

    private String firstName;
    private String lastName;
    private int age;

    /**
     * Creates a new instance of Person
     */
    public Person() {
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //Overriding toString to be able to print out the object in a readable way
    //when it is later read from the file.
    public String toString() {

        StringBuffer buffer = new StringBuffer();
        buffer.append(firstName);
        buffer.append("\n");
        buffer.append(lastName);
        buffer.append("\n");
        buffer.append(age);
        buffer.append("\n");

        return buffer.toString();
    }


}

有人可以告诉我这样做的用途是什么?

5 个答案:

答案 0 :(得分:9)

答案在您的代码评论中。调试时,您希望能够打印对象的人类可读表示。如果您不覆盖toString,则很可能会有以下代码:

Person@129cfbb

答案 1 :(得分:8)

它使调试器更易于使用。在Eclipse中(我相信几乎每个IDE),调试器默认在对象上显示toString()的输出。

编辑:正如其他人所指出的那样,还有很多其他用途:记录,显示在GUI元素中,或者将对象转换为文本以进行显示所需的任何其他用途。

答案 2 :(得分:3)

这是为了在打印对象时或者在打印对象时有一些正确的输出(由toString()实现返回)而不是java.lang.Object的标准实现(类似于your.package.Person@...)将它附加到另一个字符串。

答案 3 :(得分:2)

有很多用途。其中:在GUI中的组合框中显示此对象,以调试某些单元测试断言......

答案 4 :(得分:0)

覆盖toString,以便在以后从文件中读取对象时,能够以可读的方式打印出对象。

抱歉,无法抗拒。严肃地说,toStrings对于任何Java类都被重写是很有价值的。但是,我特意打赌一个DTO特别适合使用toString,因为该对象是为了传输数据。通常,这意味着将数据打印成可读格式。