如何为 lombok Builder 生成 getter?

问题描述 投票:0回答:5

我有以下定义:

@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
5个回答
8
投票

根据 Lombok 文档源代码,似乎没有选项可以开箱即用。

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


1
投票

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

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

1
投票

正如 DwB 的 答案 所示,构建器模式不需要也不使用吸气剂。

您可以为 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());
}

1
投票

有一种方法可以为构建器提供吸气剂(但不生成)。

我们可以创建一个内部 Builder 类并添加一个 getter 方法,然后让 Lombok 生成其余的部分。

示例:

@AllArgsConstructor
@Builder
@Value
public class Yes {
    String fieldA;

    String fieldB;

    public static class YesBuilder {
        public String getFieldA() {
            return fieldA;
        }

        // Remaining builder methods generated by Lombok
    }
}

执行示例:

public static void main(String[] args) {
    Yes.YesBuilder builder = Yes.builder();
    builder.fieldA("Yes A");
    builder.fieldB("Yes B");
    // System.out.println(builder.fieldA); - compile error
    System.out.println(builder.getFieldA());
    // System.out.println(builder.getFieldB()); - compile error
    System.out.println(builder.build());
}

研究:

Yes A
Yes(fieldA=Yes A, fieldB=Yes B)

-3
投票

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

安装插件后,IDEA 应该能够识别 Lombok 的注释语法。

© www.soinside.com 2019 - 2024. All rights reserved.