问题描述
我不确定如何对我想要实现的目标进行分类
我想我可以这样定义它:
我正在尝试创建一个方法,该方法将返回带有他的包装类的泛型
我只会展示我正在尝试做的事情
我有一个字符串代表我从调用端点获得的 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 (将#修改为@)