Lombok該如何取捨

其實之前受同事影響接觸過Lombok,當時對它的印象停留在了:怎麼侵入性怎麼強,那我什麼代碼都不用寫了,就光打註解了唄,以後還怎麼維護。但是看了人家一個個乾淨簡潔的entity,着實真香,所以決定接觸一下,並對其做一些取捨。

先接地氣的介紹一下Lombok的原理,Lombok的所有註解的生命週期都是SOURCE

@Retention 這個元註解表示該註解的生命週期,有三種類型。

 關於SOURCE和CLASS的區別可以這麼理解,SOURCE生命週期的註解內容在.class文件中根本看不到,但是CLASS可以。

而javac編譯源文件的過程是這樣的:

Lombok其實就是當javac把源文件分析生成AST語法樹後,它去修改這個語法樹,要get/set方法是吧?要構造器是吧?好幫你在AST語法樹上直接加上,然後javac將修改後的語法樹編譯成.class文件,並且卸磨殺驢丟棄了Lombok,厲害了。

Lombok的優缺點得結合具體註解說,比如@NotNull判斷非空,@Data一鍋端,@Cleanup關閉資源,以及@UtilityClass直接把方法變成靜態的了直接把類變成工具類了,類似這些我有點不喜歡,會影響後續代碼維護,這些就是缺點。

當然有優點,叭啦這麼多接下來纔是重點,總結幾個比較喜歡的Lombok註解。

1.@Getter/@Setter 代替get/set方法

相當於

2.@Accessors有點厲害,可以鏈式set,它的chain屬性默認爲false,要設置爲true才能用,同時要配合@Setter,很好理解,再厲害也得給人家set方法纔行啊。

相當於

用的時候是這樣子的

 

3.@Builder一鍵變成構造者模式,這個最喜歡。

相當於

用的時候是這樣子的

4.@AllArgsConstructor 添加一個全參數構造器

相當於

 5.NoArgsConstructor 添加一個無參構造器

相當於

用的時候可以組合起來靈活運用,比如這樣

這樣就是全參,有參和無參構造器都有了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章