關于Lombok的注解

我們知道java1.8出了很多新特性,可以讓我們的開發代碼變得騷(優)氣(雅)蓬(簡)勃(潔)起來,比如說我們現在已經熟知的lombalabala表達式和stream流


圖片 1.png
比如說lombalabala表達式的基礎語法 小箭頭 “->”,將其分為參數列表(左側)和執行函數體兩部分,即使得代碼簡潔不少,也提高了代碼的可讀性。

當然還有其他方面的一些改進,
比如說我們新建一個對象類,搞一大堆字段
圖片 2.png

一般來講我們需要寫一些構造方法,geter,seter,toString,hashcode什么的方法,雖然編譯器給我們提供了特別方便的 alt+insert 快速構建方法,但是呢,我們快速的創建好這一套流程下來 我們的entity文件變成了什么呢?


image.png

是的,它變成了一米七的糙漢子。。。
為了讓我們的類一直保持mini可愛,我們引入了lombok的注解@Data


image.png

一個注解解決一切難題


image.png

從官方文檔上可以看出@Data 注解其實是一個全家桶套餐,其中包含了@ToString,@EqualsAndHashCode和@Getter/@Setter以及 @RequiredArgsConstructor
所以才如此強大,一個注解就省了我們一百多行代碼。

正所謂優秀的工具也要正確的使用,一些時候因為我們犯的錯誤也會造成一些有趣的bug,下面我簡單舉個栗子:
image.png
這是我的一個父類
image.png

這是我的一個繼承類


image.png

下面我們猜測一下 最終輸出的是false呢還是ture呢?


image.png

答案是


image.png

為啥我的mate20和P30竟然是一樣的呢!!
這就是@Data注解的一個小心機啦,我們知道上面說它集合了@EqualsAndHashCode這個注解,在官網中對這個注解做了說明:官網全是英文,我吃力的點了翻譯一下


image.png

大概意思是說,此注解會生成equals(Object other) 和 hashCode()方法,但是如果是應用到擴展類上的時候,問題就會棘手起來,因為它默認只使用該類中定義的屬性且不調用父類的方法。但是我們可以用callSuper=true來解決這種問題,來顯示的告訴代碼我要調用父類的方法。
我們試一下:


image.png
image.png

現在是false啦!
那么為什么要有這種默認不考慮父類的設定呢?
當我再次嘗試的時候發生了一點現象可能會給我一些啟發:


image.png

因為再往上追尋父類就是Object啦!跟Object爸爸談條件是沒有意義的…

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容