簡體   English   中英

如何為 lombok Builder 生成吸氣劑?

[英]How to generate getters for lombok Builder?

我有以下定義:

@Value
@Builder(toBuilder = true)
public class MyEntity {
  String name;
}

當嘗試在構建器上使用 getter 時,例如MyEntityBuilder.getName() ,IDEA 聲明它“無法解析方法”。 此外,IDEA 不會自動完成它。

唯一可用的方法(除了build() )是 setter: MyEntityBuilder name(String name);

有沒有辦法在 lombok 生成的構建器上生成 getter? 謝謝。

使用 Lombok 1.8.16

根據Lombok 文檔源代碼,似乎沒有開箱即用的選項。

如果您想檢查構建器的內容,似乎您能做的最好的事情就是構建對象並從那里檢查字段。

您提到您使用 IntelliJ IDEA 作為您的 IDE。 碰巧有一個專門用於此的 IDEA 插件: https : //plugins.jetbrains.com/plugin/6317-lombok

安裝插件后,IDEA 應該能夠識別 Lombok 的注釋語法。

構建器通常沒有吸氣劑。 建造者模式是這樣的:

  1. 創建構建器。
  2. 在構建器中設置值。
  3. 調用構建()。

DwB 的回答表明構建器模式不需要也不使用 getter。

您可以為 Lombok builder 值設置一個 getter,但我認為它不會很有用。 您可以通過以下方式自定義構建器:

@Value
@Builder(toBuilder = true)
public class MyEntity {
    String name;
    String name2; // just something to set also
    // Customized builder
    public static class MyEntityBuilder {
        private String name;
        public String getName() {
            return this.name;
        }
        // This is not actually needed but just as an example howto
        // customise a setter.
        public MyEntityBuilder name(String name) {
            this.name = name;
            return this;
        }
    }
}

並對其進行測試(Junit5):

@Test
void test() {
    MyEntityBuilder meb = MyEntity.builder(); 
    var myEntity = meb
            // You need to set this first to access it later
            .name("Name #1")
            // The benefit having a getter ?
            .name2(meb.getName())
            .build();
    assertEquals(myEntity.getName(), myEntity.getName2());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM