[英]Lombok builder inheritance with Complex Class Structure
我已经阅读了有关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在基类中需要一个默认的构造函数。
如果我从FooTest
删除@Data
, FooTest
此错误:
基类中没有默认的构造函数。
因此,我从AbstractFoo
删除了@SuperBuilder
,并添加了带有所有参数的手动创建的构造函数。 错误仍然存在。 我尝试了其他方法和注释组合,但没有一个起作用。
我还尝试了-徒劳地将所有AbstractFoo
字段设置为protected final
,并自己声明Foo实现为final
,这与我的业务规则是一致的。
当前版本的IntelliJ IDEA插件尚不支持@SuperBuilder
。
该项目的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版本,如果它不能工作,请等待下一个版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.