優雅編程(一)——Lombok

優雅編程(一)——Lombok

在此係列開始之前已經記錄過Java8特性(一),其中的流式語法也不可謂不優雅香甜。

引子

最初學習java時候,手寫一個個的pojo類及其getter、setter、toString。。。逐漸的熟練之後感覺這樣的方式很機械,於是發現各大IDE就提供了快捷鍵創建這些內容(idea的ALT+INS、MyEclipse的ALT+Shift+s),從這時候開始逐漸深感IDE之便捷;但是在不斷地學習生活中開始厭倦這種存在“居然要按下三四次快捷鍵才能生產代碼!每當類中屬性發生變化時還要手動去修改對應方法!”等等“不便”因素的笨重方法,於是Lombok就誕生了。

正文

Lombok項目是一個Java庫,它會自動插入編輯器和構建工具中,Lombok提供了一組有用的註釋,用來消除Java類中的大量樣板代碼。僅五個字符(@Data)就可以替換數百行代碼從而產生乾淨,簡潔且易於維護的Java類。

Lombok提供了很多註解,幫我們省去了很多代碼量(例如getter、setter。。。)同時可以自動化日誌變量。官網鏈接

簡而言之:Lombok是能以簡單的註解形式來簡化java代碼,提高開發人員的開發效率的語法糖!

怎麼使用lombok?

首先安裝lombok plugin:

MrCN38.md.png

設置enable註解處理器,否則編譯時可能出錯:

MrCt9f.md.png](https://imgchr.com/i/MrCt9f)

項目中添加依賴,maven項目爲例:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>

Lombok主要註解

  • @Getter and @Setter / 自動爲屬性提供 Set和Get 方法
  • @ToString / 該註解的作用是爲類自動生成toString()方法
  • @EqualsAndHashCode / 爲對象字段自動生成hashCode和equals實現
  • @RequiredArgsConstructor / 註解在類,爲類中需要特殊處理的字段生成構造方法,比如final和被@NonNull註解的字段。
  • @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor / 顧名思義,爲類自動生成對應參數的constructor
  • @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog / 自動爲類添加對應的log支持
  • @Data / 自動爲所有字段添加@ToString, @EqualsAndHashCode, @Getter,爲非final字段添加@Setter,和@RequiredArgsConstructor,本質上相當於幾個註解的綜合效果
  • @NonNull / 自動幫助我們避免空指針。作用在方法參數上的註解,用於自動生成空值參數檢查
  • @Cleanup / 自動幫我們調用close()方法。作用在局部變量上,在作用域結束時會自動調用close方法釋放資源

這些註解都有一些可選參數,都比較簡單易懂,就不記錄了

舉例:

最常見常用的就是實體類的創建了,大量**沒有特殊需求**的Getter、Setter方法如果堆積在代碼中實在是臃腫:

MrZLB8.md.png

從方法視圖可以看到,與註解對應的方法已經存在了,根據屬性的修改變化,方法也會自動做出調整。

還有另一大應用場景,就是可以註解生成日誌:

@SpringBootTest
@Slf4j//直接使用log進行日誌記錄,lombok幫我們自動創建Logger對象
class estSlf4jApplicationTests {
    @Test
    void demo(){
        for(int i=0;i<10;i++){
            log.info("info....lobok");
            log.warn("warn....lobok");
            log.error("error....lobok");
        }
    }
}

優缺點:

優點:

  1. 能通過註解的形式自動生成構造器、getter/setter、equals、hashcode、toString等方法,提高了一定的開發效率。
  2. 讓代碼變得簡潔,不用過多的去關注相應的方法。
  3. 屬性做修改時,也簡化了維護爲這些屬性所生成的getter/setter方法等。

缺點:

  1. 不支持多種參數構造器的重載。
  2. 雖然省去了手動創建getter/setter方法的麻煩,但大大降低了源代碼的可讀性和完整性,降低了閱讀源代碼的舒適度。有時可以通過給getter/setter加一點點業務代碼,能極大的簡化某些業務場景的代碼。
  3. 要依賴插件的支持,最不能忍受的!!!

Lombok有它的得天獨厚的優點,也有它避之不及的缺點,熟知其優缺點,在實戰中靈活運用纔是王道。任何技術的學習和使用都要講求一個靈活運用!


Lombok的功能還有很多很多,博主淺嘗輒止,但是在後續的學習中還會不斷地完善和熟練對其的使用。

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