5.2.1-一個完美的equals方法的誕生.
阿新 • • 發佈:2018-12-08
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,但是一旦需要在程式碼中進行強轉那就不是簡寫版了.