精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一不小心就踩了Lombok的坑?

開發 前端
今天中午正在帶著耳機遨游在代碼的世界里,被運營在群里@了,氣沖沖的反問我最近有刪生產的用戶數據的嗎?我肯定客氣的回答道沒有呀?生產的數據我怎么能隨隨便便可以刪除,這可是公司的紅線,再說了我也沒有數據庫的刪除權限啊,不過查詢權限還是有的。

 [[413622]]

引言

今天中午正在帶著耳機遨游在代碼的世界里,被運營在群里@了,氣沖沖的反問我最近有刪生產的用戶數據的嗎?我肯定客氣的回答道沒有呀?生產的數據我怎么能隨隨便便可以刪除,這可是公司的紅線,再說了我也沒有數據庫的刪除權限啊,不過查詢權限還是有的。趕緊登上堡壘機,然后去生產數據庫查一下數據,查了一下數據是還在的,嚇死了,數據還在問題就不大了,無非就是應用程序出問題了,趕緊打開代碼查看下,為什么會少了一條用戶數據,看了下代碼貌似沒啥問題就是比較簡單的一個邏輯,直接從DB通過分頁查詢數據給到前端,然后前端負責展示,沒有啥復雜的邏輯。心想肯定是前端的問題,肯定是他少展示了數據,立馬把問題也甩給了他,讓他幫忙配合一起看看是否是前端的問題,然后自己也仔細看看代碼,不到一分鐘前端說他展示的數據沒有問題,都是后端給到的,沒有漏掉展示的。那就是后端的bug了羅。肉眼望去覺得可能出問題的就是分頁導致的數據丟了。不過這個分頁插件是全公司都在用,應該不至于出問題吧,找不到問題只能讓測試幫忙在測試環境試試,看看是否可以復現。

測試環境復現

仔細看了一眼,居然有個去重的方法,去重邏輯也比較簡單就是把list通過轉為set去下重,看下來應該就是這個去重方法有問題了 大致寫了單元測試模仿了下生產的數據,大致邏輯如下:

  1. public static void main(String[] args) { 
  2.         Set<UserDTO> userSet = new HashSet<>(); 
  3.         UserDTO userDTO = new UserDTO(); 
  4.         userDTO.setId(1); 
  5.         userDTO.setUserName("java金融"); 
  6.  
  7.         UserDTO userDTO1 = new UserDTO(); 
  8.         userDTO1.setId(2); 
  9.         userDTO1.setUserName("java金融"); 
  10.         userSet.add(userDTO); 
  11.         userSet.add(userDTO1); 
  12.         System.out.println(userSet.size()); 
  13.         System.out.println(userDTO1.equals(userDTO)); 
  14.     } 
  15.  
  16.     @Data 
  17.     static class UserDTO extends BaseDTO { 
  18.         private String userName; 
  19.     } 
  20.     @Data 
  21.     static class BaseDTO { 
  22.         private Integer id; 
  23.     } 

我們可以輸出結果set集合的長度是1,user1和user2 是相等的,明明兩個user的ID是不一樣的,為何會相等,我們知道set可以去重 是因為Set的操作,都是通過操作map來實現的,set的add其實就是調用map的put方法,map的put方法我相信大家應該都去看過其源碼,這里就不詳細再說了,大概流程就是通過key通過hash算法定位到數組的下標,先判斷key的hash是否相等,如果相等再去判斷key的value相等,如果都相等就會覆蓋原來的值。我們上面這個例子就是對象的hash和value都相等導致,但是我們的兩個對象user1和user2 應該是不等的,因為ID不等,那為什么會相等列?我們仔細看下上面的代碼,我們使用了lombok里面@Data注解,我們可以看看這個注解幫我們生成了哪些方法

通過上面的對比我們可以看出@Data注解幫我們生成了 注在類上,提供類的get、set、equals、hashCode、canEqual、toString方法,這個注解確實比較方便。上面那個bug 就是因為它生成的equals方法有問題,我們可以把上述代碼編譯下,然后把class 里面生成的equals方法拷貝出來看看

通過上述生成的代碼我們可以看出equals方法只比較了userName這個字段,也就是當前類的字段,并沒有去比較父類的字段,這就是導致兩個對象相等的原因,我們既然找到問題了,那解決問題就比較簡單。

解決問題

  • 手動重寫equals和hashCode方法,這種方法肯定是不推薦的,我們既然用了lombok就是為了解放我們的雙手,是代碼變得更加簡潔。
  • 在比較的類上加上@EqualsAndHashCode(callSuper = true) callSuper = true 會包含父類的equals 和 hashCode方法 我們可以對比下加上@EqualsAndHashCode(callSuper = true)和沒有加上這個注解生成的equals方法的代碼差異。

圖片差異點還是很明顯的,加入了@EqualsAndHashCode(callSuper = true) 會去調用父類的equals方法比較,所以這個注解也能夠解決這個問題。

  • 這樣加上注解確實可以解決問題,但是每個類上面都要加上這個注解,這也是個體力活。我們可以再找找其他的方案,例如有沒有比如配置文件設置下什么的,然后就能全局生效了。最終通過查詢資料發現我們我們寫一個lombok.config的配置文件放在我們項目的根目錄下面,內容寫上lombok.equalsAndHashCode.callSuper = call效果等同于@EqualsAndHashCode(callSuper = true),這樣的話我們就不需要為每個類都去加上這個注釋了,相當于在這個項目下面只要用到了@Data注解的類都會為其加上@EqualsAndHashCode(callSuper = true)通過配置文件的方式就可以全局生效。

總結

  • 我們再來回顧下上面的問題,歸根結底還是由于對象的equals方法使用不當引起的,所以我們在如果在判斷自定義對象業務判斷相等的時候需要去重寫下hashCode和equals方法,重寫的時候我們可以通過idea來生成,生成后最好還是去看一眼,看看生成的是否符合我們的業務要求。
  • 我們在工作中操作一些常見的容器類比如Set、Map等來實現一些我們自己的業務,我們還是有必要去看看它們的源碼的,就比如我們通過Set來進行去重,如果我們是使用的自定義對象的話,如果沒有重寫hashCode和equals方法的話,去重就會去不成功,我們只有了解了它,才能真正的去用好它。在關于hashCode和equals 阿里巴巴開發手冊也有明確的說到

  • lombok 用起來還是挺爽的,但是還是有一些細節需要稍微注意下。使用前可以大概的去看看它的官網提供的內容,不然出現莫名其妙的問題你都不知道如何下手。這個就有點類似于我們使用SpringBoot一樣,用起來非常爽,但是如果遇到莫名其妙的bug解決起來就比較頭疼。
  • 最后我們再來回顧幾道關于hashCode和equals的比較常見的面試題?其實如果我們只要真正看過HashMap的源碼的話,這下面幾個面試題還是非常簡單的。什么情況下需要我們去重寫 方法?如果只重寫equals方法不重寫HashCode可以嗎?equals ,== 和hashcode()的區別?

本文轉載自微信公眾號「 java金融」,可以通過以下二維碼關注。轉載本文請聯系 java金融公眾號。

 

 

責任編輯:武曉燕 來源: java金融
相關推薦

2023-03-10 08:27:07

for循環項目線性結構

2021-01-05 22:49:37

Python編程語言Java

2020-10-28 15:07:01

Arthas

2020-10-26 08:56:32

技術總監程序員

2025-03-05 00:27:00

2021-04-30 08:21:22

Linux管道設計

2021-03-29 18:47:53

APP服務端通信安全數據安全

2021-10-07 16:45:06

MySQL數據庫

2024-05-13 07:58:52

開源項目PR

2018-01-18 22:26:30

2021-01-30 09:50:54

MySQL密碼服務器

2020-09-29 07:44:20

跨域前后端分離插件

2019-09-19 20:47:29

刷臉支付人臉識別人工智能

2021-01-08 09:36:23

程序員比特幣黑客

2021-03-26 06:14:26

Hashcode項目排查

2020-04-30 09:45:41

安卓App小米

2022-09-27 18:19:32

Java數據結構

2019-07-29 14:38:35

服務器開發工具

2021-05-11 16:20:02

網站HTTPHTTPS

2020-02-03 09:10:23

數據庫刪庫刪庫跑路
點贊
收藏

51CTO技術棧公眾號

国产精品日韩久久久久| 精品国产91乱码一区二区三区| 日韩精品无码一区二区三区| 91亚洲视频在线观看| 欧美3p在线观看| 欧美电影免费提供在线观看| 超碰网在线观看| 快射视频在线观看| av综合在线播放| 国产免费一区二区三区在线能观看 | 日韩经典在线视频| www.av导航| 久久三级视频| 欧美激情精品久久久久久| 天天躁夜夜躁狠狠是什么心态| 欧美第一在线视频| 色婷婷综合在线| 国产日本欧洲亚洲| 91久久精品网| 玖玖精品在线视频| 免费在线超碰| 国产福利精品导航| 国产精品视频免费在线| 国产奶水涨喷在线播放| 91麻豆精品国产91久久久平台| 一精品久久久| 亚洲午夜激情网站| 亚洲视频小说| 韩日视频在线| 97成人超碰视| 成人在线视频电影| 国产欧美日韩成人| 日韩成人免费在线| 欧美做受高潮1| 亚洲精品午夜久久久久久久| 亚洲精品午夜av福利久久蜜桃| 亚洲午夜久久久久久久| 好吊日免费视频| 久久久久观看| 欧美mv日韩mv国产网站app| 国产探花在线看| 欧美www.| 色妹子一区二区| 红桃av在线播放| 成av人片在线观看www| 亚洲精品福利视频网站| 性做爰过程免费播放| av在线资源网| 中国色在线观看另类| 奇米视频888战线精品播放| 五月婷婷六月色| av中文字幕亚洲| 国产精品久久久久免费| 亚洲女同志亚洲女同女播放| 国产91高潮流白浆在线麻豆| 成人三级在线| 色一情一乱一乱一区91av| 粉嫩一区二区三区在线看| 动漫精品视频| 色哟哟中文字幕| 99精品久久久久久| 欧美精彩一区二区三区| 黄色免费在线播放| 国产日韩视频一区二区三区| 午夜欧美性电影| 在线视频自拍| 亚洲啪啪综合av一区二区三区| 熟女视频一区二区三区| 亚洲国产精品精华素| 一区二区三区波多野结衣在线观看| 国产午夜精品视频一区二区三区| 在线黄色网页| 亚洲成人午夜影院| 免费看国产曰批40分钟| 成人教育av| 欧美三级电影一区| 在线观看日本www| 一区二区精彩视频| 亚洲第一福利在线观看| 三级电影在线看| 国产一区二区三区四区| xxxx性欧美| 久久久久97国产| 国产精品丝袜xxxxxxx| 国产精品黄视频| 国产乱码久久久久| 成人精品电影在线观看| 免费日韩av电影| 天天影视久久综合| 亚洲午夜一区二区三区| 情侣黄网站免费看| 99精品女人在线观看免费视频| 日韩精品一区二区三区在线观看 | 一二区在线观看| 国产精品正在播放| 久久久www免费人成黑人精品| 国产女人在线视频| 一区二区三区中文字幕| 国产无套内射久久久国产| 久久国内精品| 亚洲第一色中文字幕| 69xxx免费| 激情视频一区二区三区| 国产精品视频一区二区高潮| 成人黄色在线观看视频| 久久久久久久综合日本| 一级特黄妇女高潮| 97久久香蕉国产线看观看| 日韩三级视频在线看| 91视频在线网站| 国产精品激情| 国产区亚洲区欧美区| 天堂av在线免费| 中文字幕亚洲一区二区va在线| 国产青青在线视频| 国产亚洲字幕| 中文字幕亚洲色图| 日韩免费视频一区二区视频在线观看| 激情六月婷婷综合| 日本一区二区三区免费看 | 欧美精品综合| 久久精品国产2020观看福利| 四虎精品永久在线| 国产999精品久久| 在线观看成人一级片| 成人爱爱网址| 亚洲成人亚洲激情| 农村黄色一级片| 毛片av一区二区| 欧美亚洲精品日韩| av中文字幕在线看| 日韩欧美中文一区二区| 少妇视频一区二区| 蜜臀av国产精品久久久久| 美女三级99| 国产高清中文字幕在线| 日韩精品在线一区| 妺妺窝人体色www聚色窝仙踪 | 久青草国产在线| 精品福利一区二区| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 日日骚一区二区网站| 91av久久| 亚洲福利视频免费观看| 中文字幕第28页| 国产激情视频一区二区三区欧美| 中文字幕一区二区三区有限公司| 精品日本视频| 最近2019中文字幕在线高清| 91丨九色丨海角社区| 久久精品亚洲国产奇米99| 一本大道熟女人妻中文字幕在线| 欧美爱爱网站| 97在线看免费观看视频在线观看| 日本免费网站在线观看| 午夜影院久久久| 国产 中文 字幕 日韩 在线| 99国内精品| 蜜桃久久精品乱码一区二区| 户外露出一区二区三区| 亚洲午夜小视频| 中文字幕观看在线| 亚洲丝袜美腿综合| 日韩精品视频在线| 亚洲午夜久久久久久久久| 欧美久久九九| 超碰97国产在线| 538在线观看| 亚洲精品一区二三区不卡| 黄色污污网站在线观看| 国产精品美女久久久久久| 黄色小视频免费网站| 欧美~级网站不卡| 福利视频一区二区三区| 岛国av在线播放| 亚洲欧洲黄色网| 国产一区二区小视频| 一区二区三区成人| 国产精品无码永久免费不卡| 日本伊人精品一区二区三区观看方式 | 日韩在线免费视频观看| 国产精品一区二区av白丝下载 | 日日骚av一区二区| 中文字幕av资源一区| 日本精品一区在线| 国产欧美一区二区三区国产幕精品| 欧美黑人3p| 国产成年精品| 2019中文字幕在线免费观看| 国产高清在线观看| 日韩精品一区二区三区四区| 国产精品久久久久久久久久久久久久久久久| 久久久久久久久久久99999| 国产永久免费网站| 宅男噜噜噜66国产日韩在线观看| 日韩精品最新在线观看| 日本精品一区二区三区在线观看视频| 91高清在线免费观看| 在线看的av网站| 亚洲成色777777女色窝| 91丨porny丨在线中文 | 亚洲乱码日产精品bd| 中文字幕人妻一区二区三区| 麻豆国产精品视频| 久久综合色视频| 亚洲电影在线一区二区三区| 欧美另类视频在线| 91精品久久久久久综合五月天| 国产999视频| 免费污视频在线| 日韩中文字幕国产| 男人天堂综合| 亚洲国产精品久久久久秋霞蜜臀 | 台湾佬中文娱乐网欧美电影| 久久国产精品影片| 国产乱子伦三级在线播放 | 国内精品在线视频| 欧美sm美女调教| 一区二区精品视频在线观看| 欧美日韩美女在线观看| 午夜爱爱毛片xxxx视频免费看| 久久久久久9999| av免费观看不卡| 国产精品一区免费视频| 国产精品69页| 国产精品视频| 国产乱子伦农村叉叉叉| 自拍日韩欧美| 偷拍盗摄高潮叫床对白清晰| 国产一区二区三区日韩精品| 久久伊人资源站| av成人资源网| 91超碰在线电影| 亚洲欧美久久精品| 国产精品一区久久久| 老司机2019福利精品视频导航| 午夜精品久久久99热福利| 污污的视频在线观看| 精品中文字幕在线| 久草中文在线| 久久亚洲国产精品| 久热国产在线| 日韩在线观看成人| 午夜激情在线观看| 日韩中文视频免费在线观看| 在线观看精品一区二区三区| 正在播放亚洲1区| 国产露出视频在线观看| 亚洲午夜av久久乱码| 国产色在线 com| 亚洲人成在线观看网站高清| 黄色软件在线| 在线观看亚洲视频| 午夜不卡视频| 欧美成年人视频网站| 最新黄网在线观看| 色综合视频一区中文字幕| 欧美人与性动交α欧美精品济南到 | 欧美三区在线视频| 在线免费看av片| 欧美日产国产精品| 国产剧情久久久| 日韩精品一区在线观看| 欧洲精品久久一区二区| 日韩经典中文字幕| 国产毛片在线| 久久影院资源网| 成人免费一区二区三区牛牛| 97人人做人人爱| 玛雅亚洲电影| 国产日韩欧美日韩| 一区二区三区亚洲变态调教大结局| 成人一区二区在线| 欧美调教网站| 日韩在线国产| 欧美在线三级| 国产二区视频在线播放| 久久性色av| 亚洲理论中文字幕| 99久精品国产| 免费成人深夜蜜桃视频| 一区二区三区视频在线看| 日韩欧美视频在线免费观看| 在线观看免费亚洲| 国产露脸国语对白在线| 日韩成人在线免费观看| √新版天堂资源在线资源| 欧美美女操人视频| 成人在线爆射| 99免费在线视频观看| 国产毛片一区二区三区| www.黄色网址.com| 亚洲一区一卡| 欧美在线a视频| 久久先锋影音av鲁色资源网| 欧美色视频一区二区三区在线观看| 亚洲高清免费观看高清完整版在线观看 | 亚洲国产成人精品女人| 青青青青草视频| 久久99热狠狠色一区二区| 国产精品无码一区二区三| 一色桃子久久精品亚洲| 黄色片免费观看视频| 正在播放亚洲一区| 日本aaa在线观看| 免费av一区二区| 国产福利亚洲| 久久99精品久久久久子伦| 亚洲电影影音先锋| 亚洲成人av免费看| 91亚洲精品一区二区乱码| 国产又粗又猛又爽又黄的视频小说| 亚洲午夜精品在线| 国产巨乳在线观看| 在线观看日韩欧美| 欧美xxxxxx| 国产美女99p| 欧美日韩亚洲一区| 看看黄色一级片| 欧美激情自拍偷拍| 久久久久久在线观看| 亚洲国产天堂久久综合网| av在线free| 国产欧美 在线欧美| 久久99蜜桃| 精品一区二区中文字幕| 成人性生交大片| www青青草原| 8v天堂国产在线一区二区| av影片在线看| 国产精品jizz在线观看麻豆| 在线一级成人| 春日野结衣av| wwww国产精品欧美| 国产精品免费av一区二区| 亚洲国产精品久久91精品| 羞羞视频在线观看不卡| 国产剧情日韩欧美| 日韩黄色大片| 国产精品一区二区小说| 国产亚洲一区字幕| 国产九色在线播放九色| 日韩激情视频在线| 亚洲天堂av影院| 欧美二区在线看| 久久亚洲欧洲| 中文字幕 自拍| 色香蕉久久蜜桃| 黄色软件在线| 国产精品永久在线| 天天射成人网| 伊人色在线视频| 亚洲欧美一区二区三区孕妇| 国产情侣激情自拍| 久久视频在线观看免费| 91成人在线| 伊人久久大香线蕉综合75| 九色综合国产一区二区三区| 国产尤物在线播放| 日韩欧美中文一区| av资源在线| 日本福利一区二区三区| 日韩高清电影一区| 顶级黑人搡bbw搡bbbb搡| 欧美一区二区三区性视频| 性欧美videos高清hd4k| 国产伦理久久久| 视频一区在线视频| 国产91在线播放九色| 欧美一区二区三级| 蜜桃麻豆av在线| 日韩福利影院| 国产一区二区三区免费播放| 久久国产在线观看| 精品一区二区电影| 日本免费成人| 精品久久久久久无码中文野结衣| 91麻豆免费看| 一级aaaa毛片| 久久久久女教师免费一区| 亚洲色图美女| 午夜精品久久久久久久99热影院| 亚洲一区二区不卡免费| 日韩美女一级视频| 国产日韩欧美在线| 极品尤物久久久av免费看| 日韩人妻无码精品综合区| 91麻豆精品国产91| 三级在线看中文字幕完整版| 亚洲一区二区精品在线| 成人免费毛片aaaaa**| 糖心vlog精品一区二区| 欧美激情a∨在线视频播放| 久久99性xxx老妇胖精品| 国产九九九视频| 色婷婷av一区二区三区之一色屋| 黄色成人在线观看| 日本免费一区二区三区| 国产成人8x视频一区二区| 亚洲 国产 日韩 欧美|