在构造函数或类声明上注释@Builder有什么区别?(龙目岛)



这两种用法@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;
}
}

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

来自龙目岛文档:

*现在"方法"模式已经明确,在构造函数上放置@Builder注释的功能类似;实际上,构造函数只是静态方法,具有特殊的语法来调用它们: 它们的"返回类型"是它们构造的类,它们的类型参数与类本身的类型参数相同

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

与 https://projectlombok.org/features/Builder 相比

最新更新