将 2 个请求 class 合并到一个 class 中,必填字段在 Java 中?

Merging 2 request classes into a single class with required fields in Java?

我有 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
}

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

如何为 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,它获取一个Request的接口实现作为参数。

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

你也可以把它和你的基地结合起来class:

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

    // getter / setter / other stuff
}

您的请求 classes 的签名将是:

class CreateRequest extends BaseRequest implements Request {...}

class UpdateRequest extends BaseRequest implements Request {...}