Effective Java 学习笔记之所有对象都通用的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Effective Java 学习笔记之所有对象都通用的方法相关的知识,希望对你有一定的参考价值。

一、覆盖equals时请遵守通用约定

1、满足下列任何一个条件时,不需要覆盖equals方法

a、类的每个实例本质上都是唯一的。此时就是Object中equals方法所表达的含义。

b、不关心类是否提供了“逻辑相等”的测试功能

c、超类中覆盖的equals方法,使用于子类,不需要自己再覆盖了。

d、类是私有或者包级私有,并确定equals方法永远不会被调用,可以不覆盖。或者覆盖equals方法,内容为抛出异常。

2、高质量equals方法的诀窍:

a、使用==操作符检测“参数是否为这个对象的引用”。

b、使用instanceof操作符检查“参数是否为正确的类型”。

c、把参数转换成正确的类型。

d、对于该类中每个关键域,检测是否对应相等于参数中过的关键域。

  不是float和double的基本类型域:直接使用==

  引用域:递归调用equals方法

  float域:Float.compare方法

  double域:Double.compare方法

e、完成了equeal方法后,问自己三个问题:是否对称、传递和一致?

3、一些告诫

1、覆盖了equals方法后,一定要覆盖hashCode方法

2、不要企图让equals方法过于智能

3、不要将equals声明中的Object对象替换为其他类型

4、注意使用@Override注解来确保覆盖

二、覆盖equals方法时,总要覆盖hashCode方法

三、始终要覆盖toString方法

四、谨慎地覆盖clone方法

1、Cloneable接口并没有包含任何方法,它决定了Object中受保护的clone方法实现的行为:如果一个类实现了Cloneable,Object的clone方法就返回该对象的逐域拷贝,或者抛出CloneNotSupportedException异常。

2、所有实现了Cloneable接口的类都应该用一个公有的方法覆盖clone,此公有方法首先调用super.clone,然后修正任何需要修正的域。

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

五、考虑实现Comparable接口

 

以上是关于Effective Java 学习笔记之所有对象都通用的方法的主要内容,如果未能解决你的问题,请参考以下文章

Java:Effective java学习笔记之 消除过期对象引用

Java:Effective java学习笔记之 静态工厂方法的简单理解和使用

Effective Java 学习笔记之创建和销毁对象

Java:Effective java学习笔记之 避免创建不必要的对象

Java:Effective java学习笔记之 请不要在新代码中使用原生态类型

Java:Effective java学习笔记之 通过私有构造器强化不可实例化的能力