第三章 对象的通用方法
虽然 Object 是一个具体的类,但它主要是为扩展而设计的。它的所有非 final 方法(equals、hashCode、toString、clone 和 finalize)都有显式的通用约定,因为它们的设计目的是被覆盖。任何类都有责任覆盖这些方法并将之作为一般约定;如果不这样做,将阻止依赖于约定的其他类(如 HashMap 和 HashSet)与之一起正常工作。
本章将告诉你何时以及如何覆盖 Object 类的非 final 方法。finalize 方法在本章中被省略,因为它在 Item-8 中讨论过。虽然 Comparable.compareTo 不是 Object 类的方法,但是由于具有相似的特性,所以本章也对它进行讨论。
10. 重写 equals 方法时遵守通用约定
虽然 Object 是一个具体的类,但它主要是为继承而设计的。它的所有非 final 方法(equals、hashCode、toString、clone 和 finalize)都有清晰的通用...
11. 重写 equals 方法时同时也要重写 hashcode 方法
在每个类中,在重写 equals 方法的时侯,一定要重写 hashcode 方法。 如果不这样做,你的类违反了 hashCode 的通用约定,这会阻止它在 HashMap 和 HashSet...
12. 始终重写 toString 方法
虽然 Object 类提供了 toString 方法的实现,但它返回的字符串通常不是你的类的用户想要看到的。 它由类名后跟一个「at」符号(@)和哈希码的无符号十六进制表示组成,例如 Pho...
13. 谨慎地重写 clone 方法
Cloneable 接口的目的是作为一个 mixin 接口 (详见第 20 条),公布这样的类允许克隆。不幸的是,它没有达到这个目的。它的主要缺点是缺少 clone 方法,而 Object ...
14. 考虑实现 Comparable 接口
与本章讨论的其他方法不同,compareTo 方法并没有在 Object 类中声明。 相反,它是 Comparable 接口中的唯一方法。 它与 Object 类的 equals 方法在性质...