可以使用泛型优化下面的代码



我有一个Service类,它对另一个返回2个不同响应对象的API进行2个不同的调用。为简单起见,如下所示

public class Service {
public AddResponseWrapper add(Request request)  {
final AddResponseWrapper addResponseWrapper = new AddResponseWrapper();
try {
final AddResponse addResponse = addApi.add(request);
addResponseWrapper.setAddResponse(addResponse);
} catch (final Exception e) {
addResponseWrapper.setErrorDetails(convert(e));
}
return addResponseWrapper;
}
public DeleteResponseWrapper delete(Request request)  {
final DeleteResponseWrapper deleteResponseWrapper = new DeleteResponseWrapper();
try {
final DeleteResponse deleteResponse = deleteApi.delete(request);
deleteResponseWrapper.setDeleteResponse(deleteResponse);
} catch (final Exception e) {
deleteResponseWrapper.setErrorDetails(convert(e));
}
return deleteResponseWrapper;
}
}

同样,我在下面创建了这两个pojo

public class AddResponseWrapper {
private AddResponse addResponse;
private ErrorDetails errorDetails;
public AddResponse getAddResponse() {
return addResponse;
}
public void setAddResponse(final AddResponse addResponse) {
this.addResponse = addResponse;
}
public ErrorDetails getErrorDetails() {
return errorDetails;
}
public void setErrorDetails(final ErrorDetails errorDetails) {
this.errorDetails = errorDetails;
}
}

public class DeleteResponseWrapper {

private DeleteResponse deleteResponse;

private ErrorDetails errorDetails;

public DeleteResponse getDeleteResponse() {
return deleteResponse;
}

public void setDeleteResponse(final DeleteResponse deleteResponse) {
this.deleteResponse = deleteResponse;
}

public ErrorDetails getErrorDetails() {
return errorDetails;
}

public void setErrorDetails(final ErrorDetails errorDetails) {
this.errorDetails = errorDetails;
}

}

AddResponseWrapper &DeleteResponseWrapper是我创建的类,而AddResponse和deleterresponse类是从我调用的API继承的类。

现在如果我再做两个APi调用,比如减去&乘法操作,我将不得不创建2个POJO类SubtractResponseWrapper和MultiplyResponseWrapper。

我不觉得这个解决方案干净,我真正想要的是一个泛型类,应该从每个这些调用返回,我可以避免使用多个Pojo类。

试试这个-然而,如果在您的响应对象中没有某种层次结构,它可能不会比ResponseWrapper<Object>好多少。

public class ResponseWrapper<T> {

private T response;

private ErrorDetails errorDetails;

public T getResponse() {
return response;
}

public void setResponse(final T response) {
this.response = response;
}

public ErrorDetails getErrorDetails() {
return errorDetails;
}

public void setErrorDetails(final ErrorDetails errorDetails) {
this.errorDetails = errorDetails;
}

}

那么你的服务变成-

public class Service {
public ResponseWrapper<AddResponse> add(Request request)  {
final ResponseWrapper<AddResponse> addResponseWrapper = new ResponseWrapper<AddResponse>();
try {
final AddResponse addResponse = addApi.add(request);
addResponseWrapper.setResponse(addResponse);
} catch (final Exception e) {
addResponseWrapper.setErrorDetails(convert(e));
}
return addResponseWrapper;
}
public ResponseWrapper<Delete> delete(Request request)  {
final ResponseWrapper<Delete> deleteResponseWrapper = new ResponseWrapper<Delete>();
try {
final DeleteResponse deleteResponse = deleteApi.delete(request);
deleteResponseWrapper.setResponse(deleteResponse);
} catch (final Exception e) {
deleteResponseWrapper.setErrorDetails(convert(e));
}
return deleteResponseWrapper;
}
}

如果不改变API类,就不能进一步简化。

最新更新