簡體   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