【问题标题】:How to make private builder() method with lombok如何使用 lombok 制作私有 builder() 方法
【发布时间】:2018-08-09 06:43:08
【问题描述】:

我正在使用lombok @Builder。当我在 MyExample 类上放置 @Builder 注释时,@Builder 生成 public builder() 方法。但我想让 private builder() 方法。不幸的是 @Builder 注释没有 access 选项。我该怎么办?

【问题讨论】:

    标签: java lombok


    【解决方案1】:

    您可以覆盖生成的构建器方法以使其私有。据我所知,这是唯一的方法:

    @Builder
    public static class Foo<F, T> {
    
        // hide lombok's builder method:
        private static FooBuilder builder() {
            return new FooBuilder();
        }
    
    }
    

    但是,这使您能够对构建器进行一些更高级的初始化。例如,您可以使用一些默认值初始化构建器,也可以使用用户提供的初始值启动构建器。

    这是一个例子:

    @Builder
    public static class Car {
    
        // kickstart builder method available to user
        public static CarBuilder builder(String brand, String model) {
            return builder().brand(brand).model(model);
        }
    
        // hide lombok's own builder method and apply some defaults:
        private static CarBuilder builder() {
            return new CarBuilder().color(System.getenv("DEFAULT_CAR_COLOR"));
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以像这样使用注解:@Builder(access = AccessLevel.PRIVATE)

      【讨论】:

      • 我认为 Builder 上没有访问权限?
      • 您可以做的就是至少将构建器 class 设为私有。 private static class MyExampleBuilder{} 虽然你定义了类 lombok 仍然会生成实现。客户端仍然可以访问 builder() 操作,但他们将无法实际使用返回的 builder 对象。
      • 这个答案(现在)实际上是正确的答案:access 可在 @Builder 上从 v1.18.8 到 docs。当前的accepted answer 仍然是有效且最灵活的方法,但如果 OP 只想按要求更改builder() 的范围,则过度杀伤
      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多