在构造函数或 class 声明上注释 @Builder 有什么区别? (龙目岛)
What is the difference of annotating @Builder on constructor or on class declaration? (Lombok)
@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;
}
}
它们都可以编译并且 运行 都很好,但是我注意到第二种情况下的奇怪行为,当注释位于 class 声明上时(例如,在我的一个大型项目中,属性值分配给wrong/swapped 变量名称;不幸的是我无法在这个简单的示例中重现这些行为)
来自龙目岛文档:
*现在 "method" 模式已经清楚了,将 @Builder 注解放在构造函数上的功能类似;实际上,构造函数只是具有调用它们的特殊语法的静态方法:它们的 'return type' 是它们构造的 class,并且它们的类型参数与 class 的类型参数相同本身
最后,将 @Builder 应用于 class 就好像您将 @AllArgsConstructor(access = AccessLevel.PACKAGE) 添加到 class 并将 @Builder 注释应用于此所有 -参数构造函数。这仅在您自己没有编写任何显式构造函数的情况下才有效。如果您确实有显式构造函数,请将 @Builder 注释放在构造函数上而不是 class 上。请注意,如果将 @Value
和 @Builder
都放在 class 上,@Builder
想要生成 'wins' 的包私有构造函数并抑制 'wins' 的构造函数 @Value
想做。 *
@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;
}
}
它们都可以编译并且 运行 都很好,但是我注意到第二种情况下的奇怪行为,当注释位于 class 声明上时(例如,在我的一个大型项目中,属性值分配给wrong/swapped 变量名称;不幸的是我无法在这个简单的示例中重现这些行为)
来自龙目岛文档:
*现在 "method" 模式已经清楚了,将 @Builder 注解放在构造函数上的功能类似;实际上,构造函数只是具有调用它们的特殊语法的静态方法:它们的 'return type' 是它们构造的 class,并且它们的类型参数与 class 的类型参数相同本身
最后,将 @Builder 应用于 class 就好像您将 @AllArgsConstructor(access = AccessLevel.PACKAGE) 添加到 class 并将 @Builder 注释应用于此所有 -参数构造函数。这仅在您自己没有编写任何显式构造函数的情况下才有效。如果您确实有显式构造函数,请将 @Builder 注释放在构造函数上而不是 class 上。请注意,如果将 @Value
和 @Builder
都放在 class 上,@Builder
想要生成 'wins' 的包私有构造函数并抑制 'wins' 的构造函数 @Value
想做。 *