[英]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.