为什么在DTO中要重写toString方法

4
我看到在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个回答

10

答案在你的代码注释里。调试时,你想要能够打印出对象的人类可读表示。如果你不重写 toString 方法,那么你很可能会得到一个像这样的表示:

Person@129cfbb

8

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

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


2
真的,但它不仅仅是用于调试器。它在任何需要有意义的DTO状态输出的地方都非常有用。 - Steve

3

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


2
有很多用途。其中包括:在GUI中将此对象显示在组合框中,进行调试,进行一些单元测试断言...

0

重写toString方法,以便在稍后从文件中读取对象时以可读的方式打印出来。

抱歉,无法抵制。说真的,对于任何Java类,重写toString方法都是有价值的。然而,我敢打赌特别是DTO需要一个toString方法,因为该对象旨在传输数据。通常,这意味着将数据打印成可读格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接