美文网首页我们就爱程序媛
高效Java第十条始终要覆盖toString

高效Java第十条始终要覆盖toString

作者: 每天学点编程 | 来源:发表于2017-08-21 20:16 被阅读54次

    java.lang.Object默认实现的toString方法返回类名@散列码的无符号十六进制表示

    toString的通用约定

    返回的字符串应该是一个“简洁的,但信息丰富的,并且易于阅读的表达形式”。
    建议所有的子类都覆盖这个方法。

    遵守toString的通用约定的意义

    虽然遵守toString的约定并不像遵守equalshashCode的约定那么重要,但是,提供好的toString实现可以使类用起来更加舒适。
    使用printlnprintf、字符串联操作符(+)、assert、调试器打印对象的时候,toString方法会被自动调用。
    下面是程序员经常使用的调试方式:


    提供好的toString方法,不仅有益于这个类的实例,同样也有益于那些包含这些实例的引用的对象,特别是集合对象。

    在实际应用中,toString方法应该返回对象所有值得关注的信息。
    如果对象太大,或者对象中包含的状态信息难以用字符串来表达,这个时候,toString应该返回一个摘要信息。
    理想情况下,字符串应该是自描述的。

    在文档中指定返回值的格式

    对于值类也建议这么做。
    指定格式的好处是,它可以被用做一种标准的、明确的、适合人阅读的对象表示法。
    这种表示法可以用于输入和输出,以及用在永久的适合于人类阅读的数据对象中,例如XML文档。
    如果指定了格式,最好再提供一个相匹配的静态工厂或者构造器,以便程序员可以很容易地在对象和它的字符串表示法之间来回转换,如BigIntegerBigDecimal和绝大多数的基本类型包装类(值类)。

    在文档中指定返回值的格式的不足

    如果这个类已经被广泛使用,一旦指定格式,就必须始终如一地坚持这种格式。
    如果不指定格式,就可以保留灵活性,以便于在将来的发行版本中增加信息,或者改进格式。

    无论你是否决定指定格式,都应该在文档中明确地表示你的意图。

    在文档中指定返回值的格式的例子

    不在文档中指定返回值的格式的例子

    都为toString返回值中包含的所有信息,提供一种编程式的访问途径

    如果不这么做,就会迫使那些需要这些信息的程序员不得不自己去解析这些字符串。
    除了降低了程序的性能,使得程序员们不得不做这些不必要的工作之外,这个解析过程也很容易出错,会导致系统不稳定,如果格式发生变化,还会使系统崩溃。如果没有提供这些访问,即使你已经指明了字符串的格式是可以变化的,这个字符串格式也成为事实上的API。

    相关文章

      网友评论

        本文标题:高效Java第十条始终要覆盖toString

        本文链接:https://www.haomeiwen.com/subject/ujrikxtx.html