Effective Java读书笔记-始终要覆盖toString

来源:互联网 发布:淘宝客可以关闭吗 编辑:程序博客网 时间:2024/06/05 07:57

虽然java.lang.object提供了toString方法的一个实现,但它所返回的字符串通常不是类的用户所希望看到的。它包含类的名称以及一个@符号,接着是散列码的无符号十六进制表示法,例如”PhoneNumber@163b91”。toString通用约定指出,被返回的字符串应该是一个“简洁的”,但信息丰富并且易于阅读的表达方式。toString的约定进一步指出建议所有的子类都覆盖这一方法。

如果为phoneNumber类提供了好的toString方法,那么,要产生有用的诊断信息将非常容易:

System.out.Printlb("Failed to connect:"+phoneNumber);

提供好的toString方法不仅有益于这个类的实例而且有益于包装这些实例的引用对象,特别是集合对象。

在实际应用中,toString方法要尽量包含对象中所有值得关注的信息。

在实现toString的过程中必须要做一个很重要的决定,是否在文档中指定返回值的格式。指定toString返回值的格式也有不足之处:如果这个类已经被广泛的被使用了,一旦指定了格式。就必须始终如一的坚持这种格式。程序员将会编写出相应的代码来解析这种字符串表示法,产生字符串表示法,以及把字符串表示法嵌套到持久的数据中。如果将来的发行版本中改变了这种表示法,就会破坏它们的代码以及数据,他们当然会抱怨,如果不指定格式,就可以保留灵活性,便于在将来的发行版本中增加信息,或者改进格式。

无论是否指定格式,都应该在文档中明确表明你的意图。如果不指定格式,文档的注释部分也应当有相应的提示部分。

无论是否指定格式,都为toSrtring返回值中包含的所有信息,提供一种编程式的访问途径。例如,phoneNumber类应当包含针对area code、prefix和line number的访问方法。如果不这么做,就会迫使那些需要知道这些信息的程序员不得不自己去解析这些字符串。除了降低程序的性能,使得程序员们去做这些不必要的工作外,这个解析过程也很容易出错,会导致系统性能不稳定,如果格式发生了变化会导致系统崩溃。如果没有提供这些访问方法,即使你已经指明了字符串的格式是可以变化的,这个字符串的格式也成为了事实上的API。

原创粉丝点击