【问题标题】:How to generate getters for lombok Builder?如何为 lombok Builder 生成吸气剂?
【发布时间】:2021-12-17 20:14:41
【问题描述】:

我有以下定义:

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

当尝试在构建器上使用 getter 时,例如MyEntityBuilder.getName(),IDEA 声明它“无法解析方法”。此外,IDEA 不会自动完成它。

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

有没有办法在 lombok 生成的构建器上生成 getter?谢谢。

使用龙目岛1.8.16。

【问题讨论】:

    标签: java lombok getter builder


    【解决方案1】:

    正如answer from DwB 所暗示的,构建器模式不需要也不使用getter。

    您可以为 Lombok 构建器值设置一个 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());
    }
    

    【讨论】:

      【解决方案2】:

      建筑商不会, 一般来说, 有吸气剂。 构建器模式是这样的:

      1. 创建构建器。
      2. 在构建器中设置值。
      3. 调用 build()。

      【讨论】:

        【解决方案3】:

        您提到您使用 IntelliJ IDEA 作为您的 IDE。碰巧有一个专门用于此的 IDEA 插件: https://plugins.jetbrains.com/plugin/6317-lombok

        安装插件后,IDEA 应该会识别 Lombok 的注解语法。

        【讨论】:

        • 语法被识别。我可以看到 setter,但看不到 getter。
        【解决方案4】:

        根据Lombok docs 或source code,似乎没有开箱即用的选项。

        如果你想检查构建器的内容,你能做的最好的似乎就是构建对象并从那里检查字段。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-02
          • 2016-10-12
          • 1970-01-01
          • 2019-09-27
          • 2018-11-16
          • 1970-01-01
          • 2018-04-05
          • 2017-04-19
          相关资源
          最近更新 更多