具有 Complex Class 结构的 Lombok 构建器继承
Lombok builder inheritance with Complex Class Structure
我已经阅读了有关 lombok 的构建器和继承的其他问题,但 none 的解决方案有效。使用 Lombok 版本 1.18.4 和 Java 11.
我正在尝试继承父构建器,同时还满足接口,仅使用不可变字段。这是我的 class 结构:
代码
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;
}
'Win Condition'
我希望龙目岛
- 识别父项所需的字段class。
- 在子 classes 的生成生成器中包含这些字段。
在代码中:
final FooInterface fooTest = FooTest.builder.foo("string").bar("string").build();
assertThat("string").equals(fooTest.getFoo());
assertThat("string").equals(fooTest.getBar());
尝试过的解决方案
问题是,IntelliJ 突出显示了带有此错误的 @Data
注释:
Lombok needs a default constructor in the base class.
如果我从 FooTest
中删除 @Data
,我会得到这个错误:
There is no default constructor available in base class.
所以我从 AbstractFoo
中删除了 @SuperBuilder
并添加了一个包含所有参数的手动创建的构造函数。错误仍然存在。我尝试了其他方法和注释组合,但 none 奏效了。
我也试过 - 但没有成功 - 将所有 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 版本,如果它不起作用,请等待下一个版本。
我已经阅读了有关 lombok 的构建器和继承的其他问题,但 none 的解决方案有效。使用 Lombok 版本 1.18.4 和 Java 11.
我正在尝试继承父构建器,同时还满足接口,仅使用不可变字段。这是我的 class 结构:
代码
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;
}
'Win Condition'
我希望龙目岛
- 识别父项所需的字段class。
- 在子 classes 的生成生成器中包含这些字段。
在代码中:
final FooInterface fooTest = FooTest.builder.foo("string").bar("string").build();
assertThat("string").equals(fooTest.getFoo());
assertThat("string").equals(fooTest.getBar());
尝试过的解决方案
问题是,IntelliJ 突出显示了带有此错误的 @Data
注释:
Lombok needs a default constructor in the base class.
如果我从 FooTest
中删除 @Data
,我会得到这个错误:
There is no default constructor available in base class.
所以我从 AbstractFoo
中删除了 @SuperBuilder
并添加了一个包含所有参数的手动创建的构造函数。错误仍然存在。我尝试了其他方法和注释组合,但 none 奏效了。
我也试过 - 但没有成功 - 将所有 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 版本,如果它不起作用,请等待下一个版本。