簡體   English   中英

Lombok @Builder 繼承解決方法

[英]Lombok @Builder inheritance workaround

Lombok @Builder 不適用於繼承用例:

例如

class Foo{
 protected int xyz1;
 .....
 protected String xyz7;
}


class Bar extends Foo{

}

對於給定的用例,Lombok 將無法生成方法來設置 Foo 類中定義的參數值。

對此的解決方法是:

  1. 手動創建 Bar 的構造函數。
  2. 在該構造函數上放置 Builder 注釋。

有更好的解決方法嗎?

Lombok 已經在 version: 1.18.2 中引入了實驗性功能,用於解決 Builder 注解面臨的繼承問題,可以使用 @SuperBuilder 注解解決,如下所示。

@SuperBuilder
public class ParentClass {
    private final String a;
    private final String b;
}

@SuperBuilder
public class ChildClass extends ParentClass{
    private final String c;
}

現在,可以使用如下的 Builder 類(@Builder 注釋無法實現)

ChildClass.builder().a("testA").b("testB").c("testC").build();

我將其留在這里以供參考,因為其他答案表明現在(不是在發布此答案時)庫中現在提供了一個 @SuperBuilder 功能,這似乎更合適。

它有點隱蔽,但人們以前有過這個問題,請參閱:

https://reinhard.codes/2015/09/16/lomboks-builder-annotation-and-inheritance/

總結博客文章

@AllArgsConstructor
public class Parent {
  private String a;
}

public class Child extends Parent {

  private String b;

  @Builder
  private Child(String a, String b){
    super(a);
    this.b = b;
  }
}

會讓你使用

Child.builder().a("testA").b("testB").build()

目前正在解決這個問題。 在此處查看進度: https : //github.com/rzwitserloot/lombok/pull/1337

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM