@Getter(lazy=true)
懶惰是一種美德!
@Getter(lazy=true)
在 Lombok v0.10 版本中引入。概述
您可以讓 lombok 生成一個 getter,它會在第一次調用時計算一次值,然後從那時起快取它。如果計算值需要大量 CPU 時間,或者該值佔用大量記憶體,這可能會很有用。要使用此功能,請建立一個 private final
變數,使用執行起來很耗費資源的表達式初始化它,並使用 @Getter(lazy=true)
注解您的欄位。該欄位將對您的程式碼的其餘部分隱藏,並且表達式將最多評估一次,即在首次調用 getter 時。沒有神奇的標記值(即,即使您昂貴的計算結果為 null
,結果也會被快取),並且您昂貴的計算不需要是執行緒安全的,因為 lombok 會處理鎖定。
如果初始化表達式很複雜,或包含泛型,我們建議將程式碼移動到私有(如果可能的話是靜態)方法中,然後調用該方法來替代。
使用 Lombok
import lombok.Getter;
|
原始 Java
public class GetterLazyExample {
|
支援的配置鍵
-
lombok.getter.lazy.flagUsage
= [warning
|error
] (預設值:未設定) - 如果配置,Lombok 將會把任何
@Getter(lazy=true)
的使用標記為警告或錯誤。
小字說明
您永遠不應該直接引用該欄位,始終使用 lombok 生成的 getter,因為該欄位的類型將被修改為 AtomicReference
。不要嘗試直接存取此 AtomicReference
;如果它指向自身,則表示該值已被計算,並且它是 null
。如果引用指向 null
,則表示該值尚未計算。此行為在未來版本中可能會更改。因此,始終使用生成的 getter 來存取您的欄位!
即使您使用 doNotUseGetters=true
,其他 Lombok 注解(如 @ToString
)總是會調用 getter。