有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们可以使用泛型优化下面的代码吗

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

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和DeleteResponse类是我从调用的API继承的类

现在如果我再调用两个APi,比如减法&;在乘法操作中,我必须再创建两个POJO类SubtractResponseWrapper和MultiplyResponseWrapper

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


共 (1) 个答案

  1. # 1 楼答案

    试试这个——但是如果你的响应对象没有某种继承权,它可能不会比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类,就无法进一步简化