将 2 个请求 class 合并到一个 class 中,必填字段在 Java 中?
Merging 2 request classes into a single class with required fields in Java?
我有 2 个请求 CreateRequest
和 UpdateRequest
。唯一的区别是,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 个方法?
如何为 CreateRequest
和 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 {...}
那么你只需要一个方法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 {...}
我有 2 个请求 CreateRequest
和 UpdateRequest
。唯一的区别是,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 个方法?
如何为 CreateRequest
和 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 {...}
那么你只需要一个方法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 {...}