使用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("上海大學");
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=上海大學, 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集成Redis實現(xiàn)訂單超時管理的詳細步驟
文章描述了如何使用Redis來處理超時支付訂單,包括引入依賴、配置連接、定義實體類、實現(xiàn)服務(wù)和監(jiān)聽器等步驟,文章討論了優(yōu)化方案、注意事項以及Redis的性能和可靠性問題,感興趣的朋友跟隨小編一起看看吧2026-03-03
MapStruct處理Java中實體與模型間不匹配屬性轉(zhuǎn)換的方法
今天小編就為大家分享一篇關(guān)于MapStruct處理Java中實體與模型間不匹配屬性轉(zhuǎn)換的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
IDEA啟動tomcat項目報錯53820 socket closed問題及解決
IDEA啟動Tomcat項目時報錯,原因是IDEA關(guān)閉時Tomcat未正常關(guān)閉,導致端口被占用,解決方法是通過任務(wù)管理器關(guān)閉占用高內(nèi)存的Java進程,通常是IDEA進程下面的,或者使用命令行找到PID并強制終止進程2024-12-12
SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決
這篇文章主要介紹了SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring boot隨機端口你都不會還怎么動態(tài)擴容
這篇文章主要介紹了Spring boot隨機端口你都不會還怎么動態(tài)擴容,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05

