5.2.1-一个完美的equals方法的诞生.

1. Employee.java

import java.util.Date;
import java.util.Objects;

public class Employee {
    private String name;
    private double salary;
    private Date hireDay;
    //1.为了避免定义一个完全无关的办法.使用@Override对覆盖超类的方法标记.
    //2.将显式参数命名为otherObject,之后会将其转换为other.
    @Override
    public boolean equals(Object otherObject){
        //3.检测是否引用同一个对象,这一步的好处是尽量避免对比每一个域.
        if(this==otherObject) return true;
        //4.检测对象是否为空
        if(null==otherObject) return false;
        //5.比较this和otherObject是否属于同一个类.
        /*
         * 5.1 如果equals的语义在子类中有所改变,就使用getClass()方法检测.
         * 5.2 否则,使用instanceof关键字检测:
         * if(!(getClass() instanceof otherObject.getClass()))
         */
        if(getClass()!=otherObject.getClass()) return false;
        //6.将otherObject强转为相应类型的变量.
        /*
         * 使用Objects.equals(a,b),两者都是null返回true,仅一个返回false,否则调用a.equals(b)
         * 主要是为了防备域都是null的情况
         */
        Employee other = (Employee) otherObject;
        //7.如果子类重新定义了equals方法,需要包含调用super.equals(other).
        return super.equals(other)
                &&Objects.equals(name, other.name)
                && salary==other.salary
                && Objects.equals(hireDay, other.hireDay);
    }
}

2.简写版equals方法.SimplifiedVersionEquals()


这个方法行不通的!!!哈哈哈哈,被骗了吧,主要是需要形参为Employee类型才能使用other.name,但是一旦需要在代码中进行强转那就不是简写版了.

猜你喜欢

转载自www.cnblogs.com/wjt123125/p/10088717.html
今日推荐