今天来看提示十二: 始终要覆盖toString
。
toString
默认会返回类名+@+哈希码的无符号十六进制。通用约定是建议所有的子类重写这个方法。作者提议这样做是因为出错的时候可以让系统更容易调试。另外toString
方法需要包涵所有值得关注的信息。如果对象比较大,那么不需要所有属性。
使用的时候可以用idea alt + Ins
自动生成的方法。
这里自动生成的程序直接将变量打印出来了,这也是重写toString需要考虑的一个重要问题:是否需要为返回值指定格式。针对很多对象,指定格式都可以提供一个标准的,明确的表达。但是同时也会带来一定的问题,如果这个类被广泛运用,那么指定格式不利于后续代码的修改。另外静态工具类中toString是没有意义的,同样也是用与大多数枚举类。还有和之前hashCode的道理相同,如果父类已经重写了toString,那么在子类中就避免再次覆盖。
我们系统中一般很少去主动覆盖toString,我偶尔写过几次好像和BigDecimal等精度有要求的对象导致。主要感觉一个类的属性可能一直会改变,如果覆盖toString,可能导致后续添加的属性就没有被涉及。而且针对出错查看这一点,可能和我们当前查看问题还是依赖报错信息和主动记录的日志,不太需要对象的toString方法有关。这一点是否合理,是否需要改进,可能还需要考虑。
网友评论