通过Java中的接口对2个共享类的继承?
在我们的Java(Spring Boot)应用程序中,我们有一个基本请求类,如下所示:
@Data
public class BaseRequest {
@NotNull
private UUID uuid;
}
从此基类延伸以创建和更新的2个请求,如下所示:
@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
}
。
In our Java (Spring Boot) app, we have a base request class as shown below:
@Data
public class BaseRequest {
@NotNull
private UUID uuid;
}
There are 2 request extending from this base class for Create and Update as shown below:
@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;
}
The only difference between these 2 classes are mandatory fields (it is required in CreateRequest
, but not mandatory in UpdateRequest
.
Here is the method that uses these 2 requests:
private void setRequest(SaveRequest request) {
IntegrationRequest integrationRequest = new IntegrationRequest();
integrationRequest.setApiKey(request.getApiKey());
integrationRequest.setLocationId(request.getLocationId());
// code omitted
}
As the fields are not same (required / non required), I have to overload this method. But I tried to use a single setRequest
method by passing another base class extending the current one and inheriting these 2 requests, but it does not work due to the some unshared fields. I also think to use interface, but I am really confused which approach I should use to solve this problem.
private void setRequest(UpdateRequest request) {
IntegrationRequest integrationRequest = new IntegrationRequest();
integrationRequest.setApiKey(request.getApiKey());
integrationRequest.setLocationId(request.getLocationId());
// code omitted
}
So, any idea to use just a single setRequest
method by passing a shared or base class/interface?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以做这样的事情:
You could do something like this: