天天看點

Lombok之@Builder使用一. 為什麼要用@Builder?二. @Builder如何使用?三. @Builder源碼四. 特别說明

一. 為什麼要用@Builder?

當一個類的成員變量比較多,同時,大部分的成員變量有預設值,僅有少量的成員變量需要初始化時,我們該如何設計這個類?我們需要讓該類滿足以下兩個要求:

  1. 友善使用者建立複雜的對象(不需要知道實作過程),僅需要初始化必要的成員變量;
  2. 代碼複用性 & 封裝性(将對象建構過程和細節進行封裝 & 複用)

這種需求和建造者模式的設計場景不期而合。同時,Lombok提供了@Builder注解用于快速地實作一個類的建造者模式。

講解@Builder之前,首先,要求讀者對建造者模式有一定的了解。通過簡書上的《一篇文章就徹底弄懂建造者模式(Builder Pattern)》對可以建造者模式有個初步的了解,并且建造者模式的優點在于:可以将構造器的setter方法名取成類似注釋的方式,這樣我們可以很清晰的知道剛才究竟設定的什麼值,可讀性較高。

從@Builder的源碼和官網的介紹來看,我覺得@Builder的實用性不如它的另一個注解@Accessors。因為@Builder能做到的,@Accessors也能做到,并且了解起來簡單(希望有前輩能做更具體詳細的解釋,這兩個注釋,從我的了解來看,我更傾向于@Accessors)。@Builder在建立對象時具有鍊式指派的特點,但是在建立對象後,就不能鍊式指派了,隻能采用setter方法,雖然toBuilder注解屬性可以複用對象的成員變量值,但是卻傳回一個新的對象,這不是我們所希望看到的。然而,@Accessors卻可以在任何時候對對象的成員變量實作鍊式指派。如果是對實用性看重的讀者,可以直接跳轉至《Lombok實驗室之@Accessors使用》。

不過,建造者模式在源碼中十分常見,特别是在各類資料源的建立過程中,掌握它更有利于閱讀源碼。

二. @Builder如何使用?

可以直接閱讀該文《Lombok 實戰 —— @Builder》,該部落客也有Lombok的系列文章,推薦讀者閱讀。

三. @Builder源碼

四. 特别說明

本文已經收錄在Lombok注解系列文章總覽中,并繼承上文中所提的特别說明。

源碼位址:gitee

繼續閱讀