将2个请求类合并到一个类别的Java中的单个类中?

发布于 2025-01-24 07:38:18 字数 843 浏览 2 评论 0原文

我有2个请求为createrequestupdaterequest。唯一的区别是,UpdatereQuest中不需要某些字段。因此,我需要超载以下采用createrequest的方法:

private void setRequest(CreateRequest request) {
    IntegrationRequest intRequest = new IntegrationRequest();
    intRequest.setLocationId(request.getLocationId());
    intRequest.setApiToken(request.getApiToken());

    // other setters and procedures
}

重载的方法是:

private void setRequest(UpdateRequest request) {
    IntegrationRequest intRequest = new IntegrationRequest();
    intRequest.setLocationId(request.getLocationId());
    intRequest.setApiToken(request.getApiToken());

    // other setters and procedures
}

这两种方法都是从同一类调用的,因此,我无法将请求作为通用方式传递。在这个场景中,我想知道是否有更好的方法而不是超载setRequest为了使用单个方法而不是2种方法?

I have 2 requests as CreateRequest and UpdateRequest. The only difference is that, some fields are not required in the UpdateRequest. For this reason, I need to overload the following method that takes CreateRequest:

private void setRequest(CreateRequest request) {
    IntegrationRequest intRequest = new IntegrationRequest();
    intRequest.setLocationId(request.getLocationId());
    intRequest.setApiToken(request.getApiToken());

    // other setters and procedures
}

The overloaded method is this:

private void setRequest(UpdateRequest request) {
    IntegrationRequest intRequest = new IntegrationRequest();
    intRequest.setLocationId(request.getLocationId());
    intRequest.setApiToken(request.getApiToken());

    // other setters and procedures
}

Both method are called from the same class and for this reason, I cannot pass the requests as a generic way. In this scene, I am wondering if there is a better approach instead of overloading setRequest in order to use a single method instead of 2 methods?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

骷髅 2025-01-31 07:38:18

对于createrequestupdaterequest,使用接口又如何?

interface Request {
    String / int getLocationId();
    String getApiToken();
}

class CreateRequest implements Request {
    public CreateRequest(String apiToken) {
        // check for apiToken != null and set the value to your object
    }
    ...
}

class UpdateRequest implements Request {...}

那么,您只需要一个方法setRequest,该将请求作为参数的接口实现。

private void setRequest(Request request) {...}

您也可以将其与您的基类结合:

abstract class BaseRequest {
    String / int locationId;
    String apiToken;

    // getter / setter / other stuff
}

您的请求类的签名将是:

class CreateRequest extends BaseRequest implements Request {...}

class UpdateRequest extends BaseRequest implements Request {...}

What about using an Interface for both CreateRequest and UpdateRequest?

interface Request {
    String / int getLocationId();
    String getApiToken();
}

class CreateRequest implements Request {
    public CreateRequest(String apiToken) {
        // check for apiToken != null and set the value to your object
    }
    ...
}

class UpdateRequest implements Request {...}

Then you would only need one method setRequest which gets an interface implementation of Request as parameter.

private void setRequest(Request request) {...}

You can also combine it with your base class:

abstract class BaseRequest {
    String / int locationId;
    String apiToken;

    // getter / setter / other stuff
}

The signature of your Request classes then would be:

class CreateRequest extends BaseRequest implements Request {...}

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