02-对所有对象都通用的方法(10-14)

10. 覆盖equals时遵守通用约定

  1. 使用 == 操作符检查 参数是否为这个对象的引用
  2. 使用 instanceof 操作符检查 参数是否为正确的类型
  3. 把参数转换成正确的类型
  4. 对于该类中的每个关键域,检查参数中的域是否与该对象中对应域相匹配

11. 覆盖 equals 时总要覆盖 hashCode

因为没有覆盖 hashCode 而违反的关键约定:相等的对象必须具有相等的散列码(hashCode)

12. 始终要覆盖 toString

提供好的 toString 实现可以使类用起来更加舒适,使用了这个类的系统也更易于调试。

13. 谨慎的覆盖 clone

实现 Cloneable 接口的类是为了提供一个功能适当的公有的 clone 方法。

不可变的类永远都不应该提供 clone 方法。

clone 方法就是另一个构造器,必须确保它不会伤害到原始的对象,并确保正确地创建被克隆对象中的约束条件。

公有的 clone 方法应该省略 throws 声明。

对象拷贝的更好的办法是提供一个拷贝构造器或拷贝工厂。

14. 考虑实现 Comparable 接口

每当实现一个对排序敏感的类时,都应该让这个类实现 Comparable 接口,以便其实例可以轻松的被分类、搜索以及用在基于比较的集合中。


02-对所有对象都通用的方法(10-14)
https://janycode.github.io/2020/09/16/02_编程语言/01_Java/04_EffectiveJava/02-对所有对象都通用的方法(10-14)/
作者
Jerry(姜源)
发布于
2020年9月16日
许可协议