簡體   English   中英

Lombok @Builder inheritance 3 類

[英]Lombok @Builder inheritance for 3 Classes

這可能是一個初學者問題,但我很困惑。

我有 3 個類,如下所示。 在這種情況下如何使用 lombok 的 @Builder 注釋。

嘗試按照以下代碼執行時,Class C 出現錯誤。

如果父 class Class B 也有@Builder注釋, Class C 會工作嗎?

我收到一個錯誤:- 錯誤:java:ClassC 中的 builder() 無法隱藏 ClassB 返回類型中的 builder() ClassCBuilder 與 ClassBBuilder 不兼容

Class C:

import lombok.Builder;
public class C extends B {
    private String fieldC;

    @Builder
    public C(String fieldC, String fieldB, String fieldA) {
        super(fieldB, String fieldA);
        this.fieldC = fieldC;
    }
}

Class B:

import lombok.Builder;
public class B extends A {
    private String fieldB;

    @Builder
    public B(String fieldB, String fieldA) {
        super(fieldA);
        this.fieldB = fieldB;
    }
}

Class A:

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
public abstract class A {
    private String fieldA;
}

@Builder應該添加到class而不是像這樣的構造函數:

import lombok.Builder;
@Builder
public class C extends B {
    private String fieldC;

    public C(String fieldC, String fieldB, String fieldA) {
        super(fieldB, String fieldA);
        this.fieldC = fieldC;
    }
}

@Builder注釋使 lombok 生成內部 Builder 類。 @Builder.Default類的內容添加到字段或方法只會修改構建器方法。 請參閱 lombok 的@Builder描述頁面中的以下示例:

 import lombok.Builder; import lombok.Singular; import java.util.Set; @Builder public class BuilderExample { @Builder.Default private long created = System.currentTimeMillis(); private String name; private int age; @Singular private Set<String> occupations; }

使用@Builder 注釋的@Builder將自動具有一個內部 class,其名稱與外部 class 類似,但后綴為“Builder”。 然后,您可以通過調用來實例化這樣的構建器:

MyClass myObject = MyClass.builder().withSomething("abc").build();

暫無
暫無

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

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