如何使用他的包装类创建一个接受和返回泛型类型的方法

问题描述

我不确定如何对我想要实现的目标进行分类 我想我可以这样定义它:
我正在尝试创建一个方法,该方法将返回带有他的包装类的泛型

我只会展示我正在尝试做的事情

我有一个字符串代表我从调用端点获得的 JSON

String httpBody = "{...}";

我有一个类名 EndPointResponse

public class EndPointResponse<T> {
    
    private T responseObj = null;
    ...
    
    public EndPointResponse(T responseObj,...) {
        this.responseObj = responseObj;
        ...
    }
}

在代码的另一部分,我试图通过调用另一个函数来创建这个对象

EndPointResponse<SomeObject> o1 = getEndPointResponse(httpBody,SomeObject.class);

我希望能够以更多方式获取此对象:

EndPointResponse<List<SomeObject>> o2 = getEndPointResponse(httpBody,SomeObject.class,List.class);

EndPointResponse<SomeWrapperObject<SomeObject>> o3 = getEndPointResponse(httpBody,SomeWrapperObject.class);

到目前为止我所做的:

public static <T> EndPointResponse<T> getEndPointResponse(String httpBody,Class<T> classOfT){
    T result = getResultObject(httpBody,classOfT);
    if(result == null){
        return createEndPointResponse(httpBody,...with some data);
    }
    return createEndPointResponse(result,...with some other data);
}

public static <T> EndPointResponse<List<T>> getEndPointResponse(String httpBody,Class<T> classOfT,Class<?> wrapperClass){
    List<T> result = getResultObject(httpBody,classOfT,wrapperClass);
    if(result == null){
        return createEndPointResponse(httpBody,...with some other data);
}

private static <T> T getResultObject(String resultString,Class<T> classOfT){
    T resultObj = null;
    try{
        resultObj = gson.fromJson(resultString,classOfT);
    }
    catch (JsonSyntaxException e){
        ...some log
    }
    return resultObj;
}

private static <T> List<T> getResultObject(String resultString,Class<?> wrapperClass){
    List<T> resultObj = null;
    try{
        resultObj = gson.fromJson(resultString,getType(classOfT,wrapperClass));
    }
    catch (JsonSyntaxException e){
        ... some log
    }
    return resultObj;
}
private static <T> EndPointResponse<T> createEndPointResponse(T resultObj,...){
    return new EndPointResponse<T>(resultObj,...);
}

private static <T> EndPointResponse<List<T>> createEndPointResponse(List<T> resultObj,...){
    return new EndPointResponse<List<T>>(resultObj,...);
}
private static <T> Type getType(Class<T> classOfT,Class<?> wrapperClass){
    return new ParameterizedType() {
        private Type type;

        @Override
        public Type[] getActualTypeArguments() {
            return new Type[] {classOfT};
        }

        @Override
        public Type getRawType() {
            return wrapperClass;
        }

        @Override
        public Type getOwnerType() {
            return null;
        }

    };
}

所以基本上我正在尝试创建另一个重载方法,而不是 List 类,它将是我想要的任何包装类,或者更好的是概括 List 类重载方法,以便它支持任何包装类

像这样:(只是一个例子,它不会有正确的语法)

public static <T> EndPointResponse<W<T>> getEndPointResponse(String httpBody,Class<W> wrapperClass){
    W<T> result = getResultObject(httpBody,...with some other data);
}

------------------------------------

private static <T> W<T> getResultObject(String resultString,Class<W> wrapperClass){
    W<T> resultObj = null;
    try{
        resultObj = gson.fromJson(resultString,wrapperClass));
    }
    catch (JsonSyntaxException e){
        ... some log
    }
    return resultObj;
}

------------------------------------

private static <T> EndPointResponse<W<T>> createEndPointResponse(W<T> resultObj,...){
    return new EndPointResponse<W<T>>(resultObj,...);
}

有人知道我如何实现这一目标吗?
任何帮助或建设性的评论将不胜感激:)
谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)