使用Lombok子類繼承父類,父類屬性不生效問題及解決
使用Lombok子類繼承父類,父類屬性不生效
子類增加:
@ToString(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Entity @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class SysRights extends BaseEntity { @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "uuid2") private String rightsId; private String rightsName; private String rightsUrl; private String rightsIcon; }
問題解決~~~~
Lombok 繼承時應(yīng)注意的點
lombok項目的產(chǎn)生就是為了省去我們手動創(chuàng)建getter和setter等基本方法的麻煩,它能夠在我們編譯源碼的時候自動幫我們生成getter和setter等方法。
即它最終能夠達到的效果是:
在源碼中沒有g(shù)etter和setter方法,但是在編譯生成的字節(jié)碼文件中有g(shù)etter和setter方法
繼承時的@Data
我們知道@Data注解在類,為類的所有字段注解@ToString、@EqualsAndHashCode、@Getter的便捷方法,同時為所有非final字段注解@Setter。
要注意@EqualsAndHashCode注解與@ToString注解默認情況下是忽略父類的成員變量的,測試代碼如下:
@Data @NoArgsConstructor @AllArgsConstructor public class School { public int id; public String name; public String age; } @Data class ShangHai extends School { private String type; } class test { public static void main(String[] args) { ShangHai shangHai = new ShangHai(); shangHai.setId(1); shangHai.setName("上海大學(xué)"); shangHai.setType("A"); ShangHai shangHai2 = new ShangHai(); shangHai2.setId(2); shangHai2.setName("華東師范"); shangHai2.setType("A"); System.out.println(shangHai.equals(shangHai2)); System.out.println(shangHai.toString()); System.out.println(shangHai2.toString()); } }
它的打印結(jié)果是:
true
ShangHai(type=A)
ShangHai(type=A)
在此可以發(fā)現(xiàn),上述的兩個實例沒有對比父類的成員變量是否相同,僅僅對比的type字段的值,所以是true。同理,toString方法是不會打印父類的成員的。
使父類成員變量參與到邏輯中
這個解決很簡單,僅僅需要給注解帶上一個參數(shù):
@Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) class ShangHai extends School { private String type; }
打印結(jié)果:
true
ShangHai(super=School(id=1, name=上海大學(xué), age=null), type=A)
ShangHai(super=School(id=2, name=華東師范, age=null), type=A)
注意:
由上述的代碼演示,我們可以知道,在類繼承的情況時應(yīng)注意@Data注解不會涉父類的成員的坑,需要加callSuper = true的參數(shù)。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot post接口接受json時,轉(zhuǎn)換為對象時,屬性都為null的解決
這篇文章主要介紹了springboot post接口接受json時,轉(zhuǎn)換為對象時,屬性都為null的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10啟動SpringBoot報錯Input length = 1問題及解決
這篇文章主要介紹了啟動SpringBoot報錯Input length = 1問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05SpringBoot+URule實現(xiàn)可視化規(guī)則引擎的方法示例
規(guī)則引擎其實是一種組件,它可以嵌入到程序當(dāng)中,將程序復(fù)雜的判斷規(guī)則從業(yè)務(wù)代碼中剝離出來,使得程序只需要關(guān)心自己的業(yè)務(wù),而不需要去進行復(fù)雜的邏輯判斷,本文給大家介紹了SpringBoot+URule實現(xiàn)可視化規(guī)則引擎的方法示例,需要的朋友可以參考下2024-12-12SpringBoot與Spring中數(shù)據(jù)緩存Cache超詳細講解
我們知道內(nèi)存讀取速度遠大于硬盤讀取速度,當(dāng)需要重復(fù)獲取相同數(shù)據(jù)時,一次一次的請求數(shù)據(jù)庫或者遠程服務(wù),導(dǎo)致在數(shù)據(jù)庫查詢或者遠程方法調(diào)用上小號大量的時間,最終導(dǎo)致程序性能降低,這就是數(shù)據(jù)緩存要解決的問題,學(xué)過計算機組成原理或者操作系統(tǒng)的同學(xué)們應(yīng)該比較熟悉2022-10-10Java數(shù)據(jù)結(jié)構(gòu)之并查集的實現(xiàn)
并查集是一種用來管理元素分組情況的數(shù)據(jù)結(jié)構(gòu)。并查集可以高效地進行如下操作。本文將通過Java實現(xiàn)并查集,感興趣的小伙伴可以了解一下2022-01-01Java實現(xiàn)字符串反轉(zhuǎn)的常用方法小結(jié)
在Java中,你可以使用多種方法來反轉(zhuǎn)字符串,這篇文章主要為大家整理了幾種常見的反轉(zhuǎn)字符串的方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03