![](/img/trans.png)
[英]lombok @Builder(toBuilder = true) compilation error when used on constructor of a sub class
[英]@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.