我們知道java1.8出了很多新特性,可以讓我們的開發代碼變得騷(優)氣(雅)蓬(簡)勃(潔)起來,比如說我們現在已經熟知的lombalabala表達式和stream流
比如說lombalabala表達式的基礎語法 小箭頭 “->”,將其分為參數列表(左側)和執行函數體兩部分,即使得代碼簡潔不少,也提高了代碼的可讀性。
當然還有其他方面的一些改進,
比如說我們新建一個對象類,搞一大堆字段
一般來講我們需要寫一些構造方法,geter,seter,toString,hashcode什么的方法,雖然編譯器給我們提供了特別方便的 alt+insert 快速構建方法,但是呢,我們快速的創建好這一套流程下來 我們的entity文件變成了什么呢?
是的,它變成了一米七的糙漢子。。。
為了讓我們的類一直保持mini可愛,我們引入了lombok的注解@Data
一個注解解決一切難題
從官方文檔上可以看出@Data 注解其實是一個全家桶套餐,其中包含了@ToString,@EqualsAndHashCode和@Getter/@Setter以及 @RequiredArgsConstructor
所以才如此強大,一個注解就省了我們一百多行代碼。
這是我的一個父類
這是我的一個繼承類
下面我們猜測一下 最終輸出的是false呢還是ture呢?
答案是
為啥我的mate20和P30竟然是一樣的呢!!
這就是@Data注解的一個小心機啦,我們知道上面說它集合了@EqualsAndHashCode這個注解,在官網中對這個注解做了說明:官網全是英文,我吃力的點了翻譯一下
大概意思是說,此注解會生成equals(Object other) 和 hashCode()方法,但是如果是應用到擴展類上的時候,問題就會棘手起來,因為它默認只使用該類中定義的屬性且不調用父類的方法。但是我們可以用callSuper=true來解決這種問題,來顯示的告訴代碼我要調用父類的方法。
我們試一下:
現在是false啦!
那么為什么要有這種默認不考慮父類的設定呢?
當我再次嘗試的時候發生了一點現象可能會給我一些啟發:
因為再往上追尋父類就是Object啦!跟Object爸爸談條件是沒有意義的…