java - 在构造函数或类声明上注释 @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
放在一个类上,想要生成“win”的包私有构造函数会@Builder
获胜并抑制想要生成的构造函数@Value
。*
推荐阅读
- css - 狮身人面像中的左对齐表格标题
- c# - 找不到具有选定值的资源 - WebAPI
- c++ - 将可变参数模板传递给 pthread_create
- ios - UIStoryboardSegue 为子类中的属性设置动画
- cordova - Phonegap 构建(找不到 aapt2-proto.jar)
- algorithm - 算法 - 如何在 O(K) 和构建 O(n) 中找到 Kt'h 元素
- leaflet - Leaflet.js circleMarker 过渡
- php - Woocommerce 和 WSO2 集成身份验证
- excel - 将 XLS 保存到 XLSM
- api - #APIDocusign 400 在本地正常工作时对生产提出错误请求