为什么在DTO中覆盖toString方法

我看到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(); } } 

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

答案在你的代码评论中。 调试时,您希望能够打印对象的可读表示forms。 如果你不覆盖toString你很可能会有一个像这样的表示:

 Person@129cfbb 

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

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

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

有很多用途。 其中:在GUI中的combobox中显示此对象,以进行调试,对于某些unit testing断言…

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

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