lombok的@EqualsAndHashcode注解詳解
有時(shí)候我們?cè)趯?shí)體類(lèi)上面會(huì)使用@Data注解,這個(gè)注解帶了@EqualsAndHashcode注解。
一、用法
- ①of 用來(lái)指明你要用什么字段來(lái)重寫(xiě)equals和hashcode(具體怎么重寫(xiě)看下文)
- ②callSuper 這個(gè)選項(xiàng)只能用在有父類(lèi)情況下,如上圖如果沒(méi)有Father那么會(huì)報(bào)錯(cuò)。默認(rèn)是false,當(dāng)改成true后,會(huì)調(diào)用父類(lèi)的equals方法(具體看下文例子)
那么上文中這樣設(shè)置,new了2個(gè)child,不管是equals還是hashcode那么他們都是一樣的
二、lombok是怎么重寫(xiě)equals和hashcode方法
equals:
- 父類(lèi):
- 子類(lèi):
hashcode:
- 父類(lèi):
- 子類(lèi):
總結(jié)
1、使用了@EqualsAndHashcode注解,那么他們都將重寫(xiě)equals和hashcode方法,而這兩個(gè)方法都是根據(jù)你of指定的屬性(默認(rèn)全部)而生成的。
2、繼承時(shí)候父類(lèi)通常也要加上該屬性,否則equals為false,hashcode會(huì)不一樣
3、使用集合類(lèi)時(shí)候也要小心一點(diǎn),例如hashmap,會(huì)造成2個(gè)對(duì)象但是會(huì)覆蓋(雖然我們業(yè)務(wù)邏輯上認(rèn)為他們相等)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java鏈表數(shù)據(jù)結(jié)構(gòu)LinkedList插入刪除元素時(shí)間復(fù)雜度面試精講
這篇文章主要為大家介紹了java LinkedList插入和刪除元素的時(shí)間復(fù)雜度面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10IDEA 中使用 Big Data Tools 連接大數(shù)據(jù)組件
本文主要介紹了IDEA 中使用 Big Data Tools 連接大數(shù)據(jù)組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05idea ssm項(xiàng)目java程序使用十六進(jìn)制rxtx包向串口發(fā)送指令的方法
這篇文章主要介紹了idea ssm項(xiàng)目java程序向串口發(fā)送指令并且使用十六進(jìn)制 rxtx包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08mybatis 映射文件中if標(biāo)簽判斷字符串相等的兩種方式
這篇文章主要介紹了mybatis 映射文件中if標(biāo)簽判斷字符串相等的方式,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06MyBatis-Plus Sequence主鍵的實(shí)現(xiàn)
這篇文章主要介紹了MyBatis-Plus Sequence主鍵的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12關(guān)于Spring?Data?Jpa?自定義方法實(shí)現(xiàn)問(wèn)題
這篇文章主要介紹了關(guān)于Spring?Data?Jpa?自定義方法實(shí)現(xiàn)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java多線程下解決數(shù)據(jù)安全問(wèn)題
這篇文章主要介紹了Java多線程下解決數(shù)據(jù)安全問(wèn)題,本文使用代碼進(jìn)行講解,可供大家學(xué)習(xí)參考2021-08-08Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng)的示例代碼
這篇文章主要介紹了如何利用Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng),可以實(shí)現(xiàn)存款,取款,查詢(xún)等功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09在navicat中導(dǎo)入mysql數(shù)據(jù)庫(kù)詳細(xì)步驟(即.sql后綴的數(shù)據(jù)庫(kù))
Navicat是MySQL非常好用的可視化管理工具,功能非常強(qiáng)大,能滿足我們?nèi)粘?shù)據(jù)庫(kù)開(kāi)發(fā)的所有需求,下面這篇文章主要給大家介紹了關(guān)于如何在navicat中導(dǎo)入mysql數(shù)據(jù)庫(kù)(即.sql后綴的數(shù)據(jù)庫(kù))的相關(guān)資料,需要的朋友可以參考下2023-04-04