繁体   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