第10条:始终要覆盖toString

时间:2022-11-16 17:51:16

虽然java.lang.Object提供了toString实现,如下

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

它包含类名称,一个"@"符号,以及散列码的无符号十六进制表示法。但这一般不是我们所希望看到的。因此建议所有子类覆盖这个toString方法。提供好的toString实现可以使类用起来更加舒适,当对象被传递给println、printf、字符串联操作符(+)以及assert或者被调试器打印出来时,toString方法会被自动调用。

两个建议:

  1.无论是否决定指定格式,都应该在文档中明确地表明意图,通过文档注释来说明。

  2.无论是否指定格式,都为toString返回值中包含的所有信息,提供一种编程式的访问途径,如使用getter方法提供。否则程序员必须去解析字符串,而这会导致大量不必要的工作量和增加程序出错的可能性。