註解類型 WithBy


@Target({FIELD,TYPE}) @Retention(SOURCE) public @interface 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)));
 
  • 巢狀類別摘要

    巢狀類別
    修飾詞和類型
    類別
    描述
    static @interface 
    已過時。
    永遠不要使用此註解 - 請閱讀文件。
  • 可選元素摘要

    可選元素
    修飾詞和類型
    可選元素
    描述
    此處列出的任何註解都會放在產生的方法上。
    如果您希望您的 with 方法為非公開,您可以在此處指定替代的存取層級。
  • 元素詳細資訊

    • value

      如果您希望您的 with 方法為非公開,您可以在此處指定替代的存取層級。
      返回
      此方法將會使用此存取修飾詞產生。
      預設
      PUBLIC
    • onMethod

      此處列出的任何註解都會放在產生的方法上。此功能的語法取決於 JDK 版本(我們對此無能為力;這是為了繞過 javac 錯誤)。
      直到 JDK7
      @With(onMethod=@__({@AnnotationsGoHere}))
      從 JDK8 開始
      @With(onMethod_={@AnnotationsGohere}) // 請注意 onMethod 後面的底線。
      返回
      要應用於產生方法的註解列表。
      預設
      {}