繁体   English   中英

具有复杂类结构的Lombok构建器继承

[英]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;
}

“胜利条件”

我想龙目岛

  1. 识别父类所需的字段。
  2. 将这些字段包括在生成的子类生成器中。

在代码中:

final FooInterface fooTest = FooTest.builder.foo("string").bar("string").build();
assertThat("string").equals(fooTest.getFoo());
assertThat("string").equals(fooTest.getBar());

尝试的解决方案

问题是,IntelliJ突出显示此错误的@Data批注:

Lombok在基类中需要一个默认的构造函数。

如果我从FooTest删除@DataFooTest此错误:

基类中没有默认的构造函数。

因此,我从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM