java - 龙目岛建造者模式问题
问题描述
我在 STS (eclipse) 中添加了 Lombok 的 JAR 文件。我正在使用 Lombok 创建使用builder()
. 但是,我在继承方面面临问题。如果我使用 Lombok 的构建器模式来创建对象,它在工作区和可执行 JAR 文件中工作。但是,如果我使用 Lombok 的构建器模式来创建继承另一个对象的对象,那么它就不起作用了。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class BaseEmp {
private int a;
private int b;
}
@Data
@NoArgsConstructor
@Builder
class Emp extends BaseEmp implements Serializable {
private static final long serialVersionUID = 1L;
@Builder
public Emp(int a, int b) {
super(a, b);
}
}
Emp emp = Emp.builder.a(ipA).b(ipB).build();
在这个我打印对象时,a 和 b 值null
在 JAR 中并在 STS 中工作。
但是,当我在工作区和 JAR 中转换为正常的对象创建时,这两个地方都可以正常工作。
意味着,在编译时,Lombok 处理器不知何故错过了继承类字段。
解决方案
如果你扩展另一个类,你真的应该考虑使用@SuperBuilder
. 虽然它仍处于试验阶段,但 Lombok 维护人员明确表示,这主要是因为它是一个非常年轻、极其复杂的功能,不会像核心功能那样快速获得支持/错误修复。@SuperBuilder
将来不太可能重新设计或放弃。
但是,如果您想坚持使用@Builder
,则不能@Builder
在类和构造函数上都有注释。只需将它放在构造函数上,它就可以工作。
此外,您的超类也不应该有@Builder
,否则您将在builder()
方法上遇到名称冲突。(您可以通过使用参数重命名它来解决这个问题builderMethodName
。)
推荐阅读
- hadoop - 在现有的单节点 hadoop 上安装 ambari
- regex - Amazon redshift 在字符串正则表达式后获取数字
- web-applications - 用于在同一设备上运行的 Web 应用的应用页面/仪表板
- robotframework - 使用“测试模板”(数据驱动)时每个测试用例的文档
- codenameone - 将 Storage.writeObject 与 Codename One 中的 Runnable 一起使用
- yii2 - 在行为 yii2 的 init 中获取模型的属性
- logistic-regression - 泰坦尼克号数据集。逻辑回归模型。混淆矩阵给出 0 作为输出
- java - 如何在函数签名中使用带有 POJO 的 spring-cloud-function-deployer
- swift - 用于检查项目是否存在的 UI 测试在 Swift 中不起作用
- python - .index.get_loc 返回 TRUE/FALSE 而不是整数。可以告诉我如何在数据框中获取索引吗?