Lombok EqualsAndHashCode 的用法

@EqualsAndHashCode

  1. 此注解會生成equals(Object other) 和 hashCode()方法炉旷。
  2. 它默認(rèn)使用非靜態(tài),非瞬態(tài)的屬性
  3. 可通過參數(shù)exclude排除一些屬性
  4. 可通過參數(shù)of指定僅使用哪些屬性
  5. 它默認(rèn)僅使用該類中定義的屬性且不調(diào)用父類的方法

當(dāng)啟動@EqualsAndHashCode時,默認(rèn)不調(diào)用父類的equals方法蜻直,當(dāng)做類型相等判斷時耻陕,會遇到麻煩,例如:

@Data
public class People {
    private Integer id;
}

@Data
public class User extends People {
    private String name;
    private Integer age;
}

public static void main(String[] args) {
    User user1 = new User();
    user1.setName("jiangxp");
    user1.setAge(18);
    user1.setId(1);

    User user2 = new User();
    user2.setName("jiangxp");
    user2.setAge(18);
    user2.setId(2);

    System.out.println(user1.equals(user2));
}

輸出結(jié)果:true

注意:兩條user數(shù)據(jù)绘盟,ID完全不一樣鸠真,結(jié)果明顯是錯的,沒有做id的equals判斷

需要將@EqualsAndHashCode修改為@EqualsAndHashCode(callSuper = true)才能得到正確結(jié)果.
反編譯修改后的User.class龄毡,發(fā)現(xiàn)有些許變化

public boolean equals(Object o) {
    if (o == this) {
        return true;
    } else if (!(o instanceof User)) {
        return false;
    } else {
        User other = (User)o;
        if (!other.canEqual(this)) {
            return false;
        } else if (!super.equals(o)) {    // (1)此處變化吠卷,調(diào)用了父類的equals,原:無此段邏輯
            return false;
        } else {
            Object this$name = this.getName();
            Object other$name = other.getName();
            if (this$name == null) {
                if (other$name != null) {
                    return false;
                }
            } else if (!this$name.equals(other$name)) {
                return false;
            }

            Object this$age = this.getAge();
            Object other$age = other.getAge();
            if (this$age == null) {
                if (other$age != null) {
                    return false;
                }
            } else if (!this$age.equals(other$age)) {
                return false;
            }

            return true;
        }
    }
}

 public int hashCode() {
    int PRIME = true;
    int result = super.hashCode(); //(2)此處變化沦零,調(diào)用了父類的hashCode(); 原:int result = 1;
    Object $name = this.getName();
    result = result * 59 + ($name == null ? 43 : $name.hashCode());
    Object $age = this.getAge();
    result = result * 59 + ($age == null ? 43 : $age.hashCode());
    return result;
}

總結(jié):(1)和(2)解釋了@EqualsAndHashCode(callSuper = true)的作用.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祭隔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子路操,更是在濱河造成了極大的恐慌疾渴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屯仗,死亡現(xiàn)場離奇詭異搞坝,居然都是意外死亡,警方通過查閱死者的電腦和手機魁袜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門桩撮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人峰弹,你說我怎么就攤上這事店量。” “怎么了垮卓?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵垫桂,是天一觀的道長。 經(jīng)常有香客問我粟按,道長诬滩,這世上最難降的妖魔是什么霹粥? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮疼鸟,結(jié)果婚禮上后控,老公的妹妹穿的比我還像新娘。我一直安慰自己空镜,他們只是感情好浩淘,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吴攒,像睡著了一般张抄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洼怔,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天署惯,我揣著相機與錄音,去河邊找鬼镣隶。 笑死极谊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的安岂。 我是一名探鬼主播轻猖,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼域那!你這毒婦竟也來了咙边?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤琉雳,失蹤者是張志新(化名)和其女友劉穎样眠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翠肘,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡檐束,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了束倍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被丧。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绪妹,靈堂內(nèi)的尸體忽然破棺而出甥桂,到底是詐尸還是另有隱情,我是刑警寧澤邮旷,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布黄选,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏办陷。R本人自食惡果不足惜貌夕,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望民镜。 院中可真熱鬧啡专,春花似錦、人聲如沸制圈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲸鹦。三九已至慧库,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亥鬓,已是汗流浹背完沪。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嵌戈,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓听皿,卻偏偏與公主長得像熟呛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尉姨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容