本文主要聊一下在lombok的builder模式下,如何進行引數校驗。
org.projectlombok
lombok
1.16.16
provided
複製**
本文基於1.16.16版本來講
@data
@builder
public class demomodel 複製**
這個@data,是個組合的註解,具體如下那麼問題來了,如果在build方法呼叫,返回物件之前進行引數校驗呢。理想的情況當然是lombok提供乙個類似jpa的@prepersist的鉤子註解呢,可惜沒有。但是還是可以通過其他途徑來解決,只不過需要寫點**,不是那麼便捷,多lombok研究深入的話,可以自己去擴充套件。*/**
* 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();複製**
@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...