一般在構造一個javaBean對象時,有三種寫法:
1、直接通過構造函數傳參的方式設置屬性,但屬性過多的話會讓構造函數十分臃腫,而且不能靈活的選擇只設置某些參數。
2、采用重疊構造器模式,先寫第一個只有必要參數的構造器,第二個構造器有一個可選參數,第三個構造器有兩個可選參數,以此類推;如果參數比較多時,類里面會出現一堆構造方法,容易出錯。
3、采用Javabean的寫法,寫一堆屬性的setter方法,通過調用setter方法給屬性賦值。 這種方法有個劣勢就是構造的過程被分到幾個調用中,在構造中可能處於不一致狀態,無法保證一致性。
而Lombok 插件中的@Builer,可以放在類、構造函數或方法上,它可以幫我們快速實現一個builder模式,builder模式既解決了重疊構造器容易出錯,也解決了Javabean的不一致問題,例子如下:
但當實體對象有繼承關系的時候,再使用Builder注解就會發現,在子類中無法通過builder方法構造父類中的成員變量。Builder注解只管承接注解的這個類,而不會管他的父類或者子類。這個問題在lombokv1.18.2 版本之前其實很難辦,但是在這個版本官方引入了一個新的注解@SuperBuilder,無法build父類的問題迎刃而解.
查閱官方文檔發現,若想使用build方法,只需要在子類和父類上都加@SuperBuilder。