java - 具有复杂类结构的 Lombok 构建器继承
问题描述
我已经阅读了有关 lombok 的构建器和继承的其他问题,但没有一个解决方案有效。使用 Lombok 版本 1.18.4 和 Java 11。
我试图继承父构建器,同时也满足接口,只使用不可变字段。这是我的班级结构:
编码
public interface FooInterface {
String getFoo();
}
该getFoo
逻辑在所有实现中都非常普遍,因此我决定创建一个Abstract
帮助程序来避免在任何地方复制粘贴相同的代码。
@Data
@SuperBuilder
public abstract class AbstractFoo implements FooInterface {
@Builder.Default
private final String foo = "foo";
}
以及实际的Foo
实现:
@Data
@SuperBuilder
public class FooTest extends AbstractFoo {
private final String bar;
}
'获胜条件'
我希望龙目岛
- 识别父类所需的字段。
- 在生成的子类构建器中包含这些字段。
在代码中:
final FooInterface fooTest = FooTest.builder.foo("string").bar("string").build();
assertThat("string").equals(fooTest.getFoo());
assertThat("string").equals(fooTest.getBar());
尝试的解决方案
问题是,IntelliJ 突出显示@Data
带有此错误的注释:
Lombok 在基类中需要一个默认构造函数。
@Data
如果我从中删除,FooTest
则会收到此错误:
基类中没有可用的默认构造函数。
所以我删除了@SuperBuilder
fromAbstractFoo
并添加了一个带有所有参数的手动创建的构造函数。错误仍然存在。我尝试过其他的东西和注释组合,但没有一个奏效。
我还尝试 - 徒劳地 - 将所有AbstractFoo
字段设置为protected final
,并自行声明 Foo 实现final
,这符合我的业务规则。
解决方案
@SuperBuilder
当前版本的 IntelliJ IDEA 插件尚不支持。
项目的 Github 跟踪器上有一个未解决的问题 - https://github.com/mplushnikov/lombok-intellij-plugin/issues/513
虽然它的目标是几天前刚刚发布的 0.25 版本 - https://github.com/mplushnikov/lombok-intellij-plugin/releases/tag/releasebuild_0.25
问题似乎仍然是开放的,尚未实施。
我建议尝试 0.25 版本,如果它不起作用,请等待下一个版本。
推荐阅读
- ios - 如何丢弃 Swift 中当前正在运行的函数?
- node.js - MongoDB:如何按值查找文档?
- python - 端点中的 FastAPI 冲突路径参数 - 良好做法?
- css - 如何调整移动标志的大小
- android - 如何使用 LinearLayout 在中心添加 CardView
- javascript - 将值 {null} 转换为类型“System.Int32”时出错 400 错误
- azure-logic-apps - 在逻辑应用工作流中另存为 .PARQUET 文件
- react-native - 如何从导航器中的屏幕转到另一个导航器中的屏幕?
- javascript - 受信任的浏览器事件可以防御哪些威胁?
- python - 是否有可能在 Python 中获得超过 1 个字符串中的字符频率?