Effective Java之对于所有对象都通用的方法 总结

版权声明:https://blog.csdn.net/qq_26814945 https://blog.csdn.net/qq_26814945/article/details/87704897

第8条 覆盖equals时请遵守通用约定
不覆盖equals方法的情况:
类的每个实例本质上都是唯一的
不关心类是否提供了 逻辑相等 的测试功能
超类已经覆盖了equals 从超类继承过来的行为对于子类也是合适的

类是私有的或是包级私有的 可以确定它的equals方法永远不会被调用 在这种情况下 无疑是应该覆盖equals方法的 以防它被意外调用

覆盖equals方法的时候 必须要遵守的通用约定:
自反性 对于任何非null的引用值x x.equals(x)必须返回true
对称性 对于任何非null的引用值x和y 当且仅当y.equals(x)返回true时 x.equals(y)必须返回true
传递性 对于任何非null的引用值x y和z 如果x.equals(y)返回true 并且y.equals(z)也返回true 那么x.equals(z)也必须返回true
一致性 对于任何非null的引用值x和y 只要equals的比较操作在对象中所用的信息没有被修改 多次调用x.equals(y)就会一致地返回true 或者一致地返回false
对于任何非null的引用值x x.equals(null)必须返回false

实现高质量equals方法的诀窍:
使用==操作符检查 参数是否为这个对象的引用
使用instanceof操作符检查 参数是否为正确的类型
把参数转换成正确的类型
对于该类中的每个 关键 域 检查参数中的域是否与该对象中对应的域相匹配
当你编写完成了equals方法之后 应该问自己三个问题 它是否是对称的 传递的 一致的

注意事项:
覆盖equals时总要覆盖hashCode
不要企图让equals方法过于智能
不要将equals声明中的Object对象替换为其他的类型

第9条 覆盖equals时总要覆盖hashCode

第10条 始终要覆盖toString
提供好的toString实现可以使类用起来更加舒适
在实际应用中 通String方法应该返回对象中包含的所有值得关注的信息

第11条 谨慎地覆盖clone
实际上 clone方法就是另一个构造器 你必须确保它不会伤害到原始的对象 并确保正确地创建被克隆对象中的约束条件
实现对象拷贝的好办法是提供一个拷贝构造器或拷贝工厂

第12条 考虑实现Comparable接口

猜你喜欢

转载自blog.csdn.net/qq_26814945/article/details/87704897