聊聊lombok構造模式的引數校驗

2021-09-11 12:21:26 字數 1917 閱讀 3114

本文主要聊一下在lombok的builder模式下,如何進行引數校驗。

org.projectlombok

lombok

1.16.16

provided

複製**

本文基於1.16.16版本來講

@data

@builder

public class demomodel 複製**

這個@data,是個組合的註解,具體如下

/**

* generates getters for all fields, a useful tostring method, and hashcode and equals implementations that check

* all non-transient fields. will also generate setters for all non-final fields, as well as a constructor.

* * equivalent to .

* * complete documentation is found at "">the project lombok features page for @data.

* * @see getter

* @see setter

* @see requiredargsconstructor

* @see tostring

* @see equalsandhashcode

* @see lombok.value

*/@target(elementtype.type)

@retention(retentionpolicy.source)

public @inte***ce data

*

*

* default: no static constructor, instead the normal constructor is public.

*/string staticconstructor() default "";

}複製**

@builder會按builder模式生成乙個內部類,具體使用如下

demomodel model = demomodel.builder()

.name("hello")

.age(-1)

.build();複製**

那麼問題來了,如果在build方法呼叫,返回物件之前進行引數校驗呢。理想的情況當然是lombok提供乙個類似jpa的@prepersist的鉤子註解呢,可惜沒有。但是還是可以通過其他途徑來解決,只不過需要寫點**,不是那麼便捷,多lombok研究深入的話,可以自己去擴充套件。

@data

@builder

public class demomodel

public static class internalbuilder extends demomodelbuilder

@override

public demomodel build

() }

public static demomodelbuilder builder

() }複製**

這裡通過繼承lombok生成的builder(重寫build()方法加入校驗),重寫builder()靜態方法,來返回自己builder。這樣就大功告成了。

上面的方法還不夠簡潔,可以考慮深入研究lombok進行擴充套件,實現類似jpa的@prepersist的鉤子註解,更進一步可以加入支援jsr303的validation註解。

二階構造模式

我們在建立物件的時候,需要呼叫建構函式,對物件做初始化,但是建構函式是沒有返回值的,無法判斷建構函式的執行結果。如果建構函式執行過程中,發生了異常,導致函式提前返回了,那麼這種情況下,我們建立的物件會處於什麼狀態。1.建構函式確定對物件做初始狀態,物件的建立與建構函式無關,也就是說儲存物件的那片記憶...

二階構造模式

模式 方法。設計模式,就是設計方法。前人證明了的行之有效的方法。建構函式 1.關於建構函式 類的建構函式用於物件的初始化。建構函式與類同名並且沒有返回值。建構函式在物件定義時自動被呼叫。問題 1.如何判斷建構函式的執行結果?2.在建構函式中執行return語句會發生什麼?3.建構函式執行結束是否意味...

二階構造模式

建構函式只決定物件的初始化狀態,不可以決定物件是否建立。如果在建構函式中使用return,則將構造出乙個半成品物件。半成品物件 建構函式沒有全部執行。二階構造 分兩步來構造乙個物件。第一步 與系統資源無關的初始化操作。不會出現異常操作的 include class twophasecons bool...