簡體   English   中英

在構造函數注釋中使用 builder(lombok) 時出錯

[英]Error while use builder(lombok) in constructor annotation

@Data
@Builder
public static class Common {
    private String common1;
    private String common2;
}

@Getter
public static class Special extends Common {
    private String special1;

    @Builder
    public Special(String common1, String common2, String special1) {
        super(common1, common2);
        this.special1 = special1;
    }
}

發生以下錯誤:

Error:(149, 9) java: builder() in com.example.home.ExampleDTO.Special cannot override builder() in com.example.home.ExampleDTO.Common   
return type com.example.home.ExampleDTO.Special.SpecialBuilder is not compatible with com.example.home.ExampleDTO.Common.CommonBuilder

當我把( builderMethodName = "b" )這個參數放在@Builder(Special constructor)它工作正常。

@Builder(builderMethodName = "b")
public Special(String common1, String common2, String special1) {

我不知道為什么第一個代碼會出錯。 請幫幫我。 謝謝

@Builder在兩個類中都創建了一個靜態方法builder() 它返回相應構建器的實例。 但是方法的返回類型不兼容,因為SpecialBuilderCommonBuilder是不同CommonBuilder相關的類: @Builder沒有(並且技術上不能)考慮類之間的繼承關系。 所以編譯器抱怨兩個方法同名,沒有參數,但返回類型不同。 這在 Java 中是不可能的。

要解決這個問題,您有兩個選擇:

  1. 在兩個類上使用@SuperBuilder @SuperBuilder旨在與繼承一起使用。

  2. 正如您已經發現的那樣,您可以在其中一個類中重命名該方法。

暫無
暫無

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

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