Lombok常用注解的使用總結(jié)

Lombok是什么糊饱?

一個在編譯階段修改增強Java類的工具,使用方式基于注解颠黎,常用于:

  • 為Java POJO生成屬性對應(yīng)的getter,setter等
  • 為Java POJO生成builder構(gòu)造器模式的實現(xiàn)
  • 為Java類自動添加其他重復(fù)性代碼另锋,比如日志記錄的聲明代碼可以通過@Slf4j注解添加

項目中是否引入Lombok一直是個存在爭議,它的主要優(yōu)勢在于消除Java類的部分臃腫代碼狭归,提高開發(fā)效率夭坪,降低代碼維護成本;缺點是需要IDE插件支持过椎,需要團隊統(tǒng)一規(guī)范室梅,另外某些注解生成的隱性實現(xiàn)可能導(dǎo)致問題跟蹤調(diào)試困難。

不使用Lombok疚宇,IDE也可以自動生成getter,setter代碼亡鼠,但Lombok除了getter,setter還有@Builder和@SuperBuilder等非常實用的自動實現(xiàn)。比如你可以將一個POJO類轉(zhuǎn)化為builder模式敷待,如果你又有一個子類间涵,子類的構(gòu)造器還要繼承自父類,寫起來就費勁了讼撒。而通過Lombok只需要一個@SuperBuilder注解(v1.18.2+版本支持)浑厚。

如何引入Lombok

  • 引入依賴,以gradle為例:
compile("org.projectlombok:lombok:1.18.4")
  • IDE中安裝插件根盒,以IDEA為例: Settings -> Plugins -> 搜索Lombok Plugin钳幅,點擊安裝
image.png
  • IDEA中配置啟用注解的處理: Enable annotation processing (不開啟將導(dǎo)致編譯錯誤)
image.png

Lombok常見用法

  • 在屬性上添加的注解: @Getter、@Setter炎滞、@NonNull等:

示例代碼:

public class Parent {
    // get,set添加在指定屬性上
    @Getter @Setter private int id;
    @Getter @Setter private String name;
}
  • 在類上添加的注解:

    - @Data 注解組合敢艰,含@Setter、@Getter册赛、@RequiredArgsConstructor钠导、@EqualsAndHashCode等注解
    - 構(gòu)造函數(shù)注解: @NoArgsConstructor震嫉、@AllArgsConstructor、@RequiredArgsConstructor
    - 構(gòu)造器builder注解: @Builder牡属、@SuperBuilder
    - 日志聲明的注解: @Slf4j 等
    

示例代碼:

@Data
public class Child extends Parent {
    private String ext;
}

@Setter@Getter或@Data注解添加后可以通過new創(chuàng)建對象并調(diào)用getter票堵,setter方法:

Child c1 = new Child();
c1.setId(1);  
System.out.println(c1.getId());

Builder構(gòu)造器模式與繼承

構(gòu)造模式的鏈式調(diào)用寫起來很方便,自己實現(xiàn)構(gòu)造模式要在POJO類中寫較多代碼逮栅,尤其是需要繼承父類的builder時悴势。
Lombok的@Builder注解可以方便的支持構(gòu)造模式
示例代碼:

@Builder
public class Child extends Parent {
    private String ext;
}

調(diào)用方法:

Child c1 = Child.builder().ext("子類屬性ext").build();
System.out.println(c1.getExt());

此例中的鏈式調(diào)用僅有ext()屬性,即使給父類Parent也添加@Builder注解也依然不能鏈式調(diào)用id()和name()措伐,自己去寫builder的實現(xiàn)也是這樣特纤,類是繼承的,但類中的builder并無繼承關(guān)系侥加,而實際開發(fā)場景中我們一般都需要讓子類的builder繼承父類builder的行為捧存。

Lombok在v1.18.2版本中針對這個問題增加了@SuperBuilder注解,子類和父類中都添加@SuperBuilder注解担败,子類builder即可繼承父類builder昔穴。

代碼示例:

@SuperBuilder
public class Parent {
    // get,set添加在指定屬性上
    @Getter @Setter private int id;
    //如果需要讓build出的對象屬性使用默認值,需要添加@Builder.Default注解
    @Builder.Default
    @Getter @Setter private String name = "unknown";
}

@SuperBuilder
@Data
public class Child extends Parent {
    private String ext;
}

調(diào)用示例:

Child c1 = Child.builder().id(1).name("名稱").ext("子類屬性ext").build();
System.out.println(c1.getId());

需要注意的是: 關(guān)于builder的繼承提前,Lombok Plugin尚未更新支持@SuperBuilder傻咖,所以以上寫法在IDE下還會提示編譯錯誤,等更新吧岖研,或者用稍微蹩腳一點的解決方案:Lombok’s @Builder annotation and inheritance


Diboot - 簡單高效的輕代碼開發(fā)框架

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卿操,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孙援,更是在濱河造成了極大的恐慌害淤,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拓售,死亡現(xiàn)場離奇詭異窥摄,居然都是意外死亡,警方通過查閱死者的電腦和手機础淤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門崭放,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸽凶,你說我怎么就攤上這事币砂。” “怎么了玻侥?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵决摧,是天一觀的道長。 經(jīng)常有香客問我,道長掌桩,這世上最難降的妖魔是什么边锁? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮波岛,結(jié)果婚禮上茅坛,老公的妹妹穿的比我還像新娘。我一直安慰自己则拷,他們只是感情好灰蛙,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隔躲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪物延。 梳的紋絲不亂的頭發(fā)上宣旱,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音叛薯,去河邊找鬼浑吟。 笑死,一個胖子當著我的面吹牛耗溜,可吹牛的內(nèi)容都是我干的组力。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抖拴,長吁一口氣:“原來是場噩夢啊……” “哼燎字!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阿宅,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤候衍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洒放,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛉鹿,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年往湿,在試婚紗的時候發(fā)現(xiàn)自己被綠了妖异。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡领追,死狀恐怖他膳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绒窑,我是刑警寧澤矩乐,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響散罕,放射性物質(zhì)發(fā)生泄漏分歇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一欧漱、第九天 我趴在偏房一處隱蔽的房頂上張望职抡。 院中可真熱鬧,春花似錦误甚、人聲如沸缚甩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擅威。三九已至,卻和暖如春冈钦,著一層夾襖步出監(jiān)牢的瞬間郊丛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工瞧筛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厉熟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓较幌,卻偏偏與公主長得像揍瑟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乍炉,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容