註解類型 WithBy
放在任何欄位上,讓 lombok 建構一個 'withBy' - 一個 withFieldNameBy 方法,此方法會產生此物件的副本(除了 1 個欄位會獲得新值)。
完整文件請見 關於 @WithBy 的 project lombok 功能頁面。
範例
private @WithBy final int foo; private @WithBy final String bar;將會產生
public SELF_TYPE withFooBy(@lombok.NonNull IntUnaryOperator operator) { int foo = operator.apply(this.foo); return this.foo == foo ? this : new SELF_TYPE(foo, bar); } public SELF_TYPE withBarBy(@lombok.NonNull Function<? super String, ? extends String> operator) { String bar = operator.apply(this.bar); return this.bar == bar ? this : new SELF_TYPE(foo, bar); }
此註解也可以應用於類別,在這種情況下,效果如同所有尚未具有 WithBy
註解的非靜態欄位都具有該註解。
此註解主要用於階層式不可變資料結構。例如
class Movie { @WithBy private final Director director; } class Director { @WithBy private final LocalDate birthDate; }使用普通的
@With
,若要將電影導演的出生日期增加一天,您會寫成movie = movie.withDirector(movie.getDirector().withBirthDate(movie.getDirector().getBirthDate().plusDays(1)));但使用
@WithBy
,您會寫成movie = movie.withDirectorBy(d -> d.withBirthDateBy(bd -> bd.plusDays(1)));
-
巢狀類別摘要
巢狀類別 -
可選元素摘要
可選元素修飾詞和類型可選元素描述此處列出的任何註解都會放在產生的方法上。如果您希望您的 with 方法為非公開,您可以在此處指定替代的存取層級。
-
元素詳細資訊
-
value
-
onMethod
WithBy.AnyAnnotation[] onMethod此處列出的任何註解都會放在產生的方法上。此功能的語法取決於 JDK 版本(我們對此無能為力;這是為了繞過 javac 錯誤)。
直到 JDK7
@With(onMethod=@__({@AnnotationsGoHere}))
從 JDK8 開始
@With(onMethod_={@AnnotationsGohere})
// 請注意onMethod
後面的底線。- 返回
- 要應用於產生方法的註解列表。
- 預設
{}
-