我什么时候应该覆盖toString()?

Iva*_*van 7 java

我知道Javadocs说:

返回对象的字符串表示形式.通常,toString方法返回一个"文本表示"此对象的字符串.结果应该是一个简洁但信息丰富的表示,便于人们阅读.建议所有子类都重写此方法.

但是什么时候我应该花时间toString来为我的课程重写方法?它应该是的第一件事情我做覆盖沿着一个equalshashCode?或者我应该等到实际需要它?

我知道Eclipse可以toString为你自动生成方法,所以一旦我知道了我的类的字段,我应该让Eclipse自动生成它们吗?

Laf*_*ica 14

Josh Bloch在 10项的Effective Java中给出了一个很好的解释.

[...]提供良好的toString实现使您的课程使用起来更加愉快.

它确实可以更容易地输出调试跟踪,或者生成更好的日志消息,因为您可以直接使用对象的字符串表示形式toString(); 您不必手动构建一个字符串,该字符串提供对象所需的信息.

如书中所述,您应该在结果中包含所有有趣的信息String.您还应该正确记录您的方法; 您可以记录结果String格式,但至少应该记录您的意图(格式是否可以更改,或者不可能更改).

最后,由您(以及您公司的标准)来决定是否在每个班级中覆盖它应该是您的习惯的一部分.就个人而言,我不会toString ()在每个类别中都覆盖,只会在那些最有可能被用于调试痕迹的类别中.