通过Java中的接口对2个共享类的继承?

发布于 2025-01-24 08:33:20 字数 1266 浏览 1 评论 0原文

在我们的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墟烟 2025-01-31 08:33:20

您可以做这样的事情:

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
}

You could do something like this:

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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文