簡體   English   中英

構造函數上的@Builder(toBuilder = true):錯誤“具有私有訪問權限”

[英]@Builder(toBuilder = true) on constructor: Error "has private access"

我有以下2個親子班..

@AllArgsConstructor
public abstract class Data {

    @Getter
    private final String name;

    @Getter
    private final String source;

    @Getter
    private final String message;
}

public class EventData extends Data {

    @Getter
    private String errorCode;

    @Getter
    private String errorMessage;

    @Getter
    private String api;


    @Builder(toBuilder = true)
    public EventData(String eventName, String errorCode, String eventMessage, String api, String errorMessage) {
        super(eventName, EventSource.BARCLAYS_GIL_PLUGIN_A_REST_SERVICE, eventMessage);
        this.errorCode = errorCode;
        this.errorMessage = errorMessage;
        this.api = api;
    }

}

我收到以下錯誤:

    [javac] /local/home/vishivan/workplace/xyx/src/ABC/src/com/LOL/mno/models/EventData.java:36: error: eventMessage has private access in Data
    [javac]     @Builder(toBuilder = true)
    [javac]     ^
    [javac] 1 error

所以這是我的限制

我在 EventData 中需要一個生成器,我還需要一個復制構造函數來創建 EventData object。我嘗試添加 setter@ 並導致錯誤,因為最終變量無法定義 setter ...我該如何解決這個問題?

您正在使用toBuilder = true ,並且您的構造函數參數的名稱與超類中的相應字段不同。 因此,在toBuilder()方法中填充構建器時,lombok 不知道如何從實例中提取字段值。

要解決這個問題,您可以使用與構造函數參數完全相同的名稱(如果字段可以從您的子類訪問,例如protected ),或者給 lombok 提示以何種方式檢索字段值。 后者可以使用@Builder.ObtainVia注釋來實現:

public EventData(@Builder.ObtainVia(method = "getName") String eventName, String errorCode, @Builder.ObtainVia(method = "getMessage") String eventMessage, String api, String errorMessage) {
    super(eventName, EventSource.BARCLAYS_GIL_PLUGIN_A_REST_SERVICE, eventMessage);
    this.errorCode = errorCode;
    this.errorMessage = errorMessage;
    this.api = api;
}

暫無
暫無

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

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