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