【问题标题】:What is the difference of annotating @Builder on constructor or on class declaration? (Lombok)在构造函数或类声明上注释 @Builder 有什么区别? (龙目岛)
【发布时间】:2020-01-18 09:57:32
【问题描述】:

@Builder这两种用法有什么区别?

import lombok.*;

class BuilderAnnotationOnConstructor{

    Integer fieldOne, fieldTwo;

    @Builder
    public BuilderAnnotationOnConstructor(int fieldOne, int fieldTwo) {
        this.fieldOne = fieldOne;
        this.fieldTwo = fieldTwo;
    }
}

@Builder
class BuilderAnnotationOnClass{

    Integer fieldOne, fieldTwo;

    public BuilderAnnotationOnClass(int fieldOne, int fieldTwo) {
        this.fieldOne = fieldOne;
        this.fieldTwo = fieldTwo;
    }
}

它们都可以正常编译和运行,但我注意到第二种情况下的奇怪行为,当注释位于类声明上时(例如,在我的一个大型项目中,属性值分配给错误/交换的变量名;不幸的是我没有能够在这个简单的例子中重现这些行为)

【问题讨论】:

    标签: java builder lombok


    【解决方案1】:

    来自龙目岛文档:

    *既然“方法”模式已经明确,在构造函数上添加@Builder注解类似;实际上,构造函数只是具有调用它们的特殊语法的静态方法:它们的“返回类型”是它们构造的类,它们的类型参数与类本身的类型参数相同

    最后,将@Builder 应用到一个类就好像你将@AllArgsConstructor(access = AccessLevel.PACKAGE) 加到了这个类中,并将@Builder 注解应用到了这个全参数构造器。这仅在您自己没有编写任何显式构造函数时才有效。如果您确实有显式构造函数,请将 @Builder 注释放在构造函数上而不是类上。请注意,如果您将@Value@Builder 都放在一个类上,@Builder 想要生成“获胜”的包私有构造函数会抑制@Value 想要创建的构造函数。 *

    来自https://projectlombok.org/features/Builder

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多