2 回答

TA貢獻1804條經驗 獲得超8個贊
我最近嘗試@SuperBuilder使用 Lombok 1.18.8 和 IntelliJ 進行自定義,效果很好。我面臨的唯一問題是,我無法toBuilder在 SuperBuilder - 中使用標志@SuperBuilder(toBuilder=true)。
下面是覆蓋@SuperBuilder 方法的代碼。
public static abstract class ChildBuilder<C extends Child, B extends ChildBuilder<C, B>>
extends ParentBuilder<C, B> {
private LocalDate date;
public B date(String dateStr) {
this.date = LocalDate.parse(dateStr);
return self();
}
}

TA貢獻1827條經驗 獲得超8個贊
當@SuperBuilder在1.18.2介紹,自定義這是不可能的。如果您嘗試,Lombok 1.18.2 會為您提供錯誤消息SuperBuilder does not support customized builders.
但是,Lombok 1.18.4 添加了有限的@SuperBuilder. (這是有限的,因為你不能修改setter方法,但你可以添加自己的方法并修改build()和builder()。)
生成的@SuperBuilder代碼相當復雜,與@Builder. 為避免意外弄亂加載泛型的構建器代碼,您應該首先從 delombok 輸出中復制構建器類標頭。在您的情況下(添加新的 setter 方法),自定義抽象構建器類ParentBuilder(而不是ParentBuilderImpl)。查看 delomboked 代碼以了解應如何定義 setter,尤其是返回類型。
這是您示例的自定義構建器代碼:
public abstract static class ParentBuilder<C extends Parent, B extends ParentBuilder<C, B>> {
public B setAllTo(final int value) {
return a(value).b(value);
}
}
使用 Lombok 1.18.4,它可以編譯并按預期工作。
添加回答
舉報