在我們的 Java (Spring Boot) 應用程式中,我們有一個基本請求類,如下所示:
@Data
public class BaseRequest {
@NotNull
private UUID uuid;
}
有 2 個從該基類擴展而來的 Create 和 Update 請求,如下所示:
@Data
public class CreateRequest extends BaseRequest {
@NotEmpty
private String apiKey;
@NotEmpty
private String locationId;
}
@Data
public class UpdateRequest extends BaseRequest {
private String apiKey;
private String locationId;
}
這兩個類之間的唯一區別是必填欄位(在 中是必需的CreateRequest,但在UpdateRequest.
這是使用這兩個請求的方法:
private void setRequest(SaveRequest request) {
IntegrationRequest integrationRequest = new IntegrationRequest();
integrationRequest.setApiKey(request.getApiKey());
integrationRequest.setLocationId(request.getLocationId());
// code omitted
}
由于欄位不同(必需/非必需),我必須多載此方法。但是我嘗試通過傳遞另一個擴展當前基類并繼承這兩個請求的基類來使用單個setRequest方法,但是由于一些未共享的欄位,它不起作用。我也想使用界面,但我真的很困惑我應該使用哪種方法來解決這個問題。
private void setRequest(UpdateRequest request) {
IntegrationRequest integrationRequest = new IntegrationRequest();
integrationRequest.setApiKey(request.getApiKey());
integrationRequest.setLocationId(request.getLocationId());
// code omitted
}
setRequest那么,任何想法通過傳遞共享或基類/介面來使用單個方法?
uj5u.com熱心網友回復:
你可以這樣做:
public interface Request {
String getApiKey();
String getLocationId();
}
@Data
public class CreateRequest extends BaseRequest implements Request {
@NotEmpty
private String apiKey;
@NotEmpty
private String locationId;
}
@Data
public class UpdateRequest extends BaseRequest implements Request {
private String apiKey;
private String locationId;
}
private void setRequest(Request request) {
CreateRequest integrationRequest = new CreateRequest();
integrationRequest.setApiKey(request.getApiKey());
integrationRequest.setLocationId(request.getLocationId());
// code omitted
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465870.html
上一篇:Java泛型-通過繼承層的上限
