我正在使用gson和volley进行http get请求。我的想法是让一个方法返回一个包含序列化JSON的对象。
public responseHolder getRequest(){
//Make call
//Parse Json into JsonObject
return responseHolder;
}
我的问题是我希望该方法可以使用不同的api调用返回不同的数据。我有3个类,旨在存储3个不同的调用,我希望该方法返回正确类型的对象。是否有一种方法或设计模式可以帮助我在这种情况下,或者我应该从一个不同的角度来处理它?</ p>
答案 0 :(得分:1)
试试这个:
public <T> T getRequest(Class<T> clazz){
//Make call
//Parse Json into JsonObject
String json = ...;
return new Gson().fromJson(json, clazz);
}
答案 1 :(得分:1)
也许试试这个?
private String getRequest()
{
// Make Call
return jsonString;
}
public TypeA getA()
{
return new Gson().fromJson(getRequest(), TypeA.class);
}
public TypeB getB()
{
return new Gson().fromJson(getRequest(), TypeB.class);
}
public TypeC getC()
{
return new Gson().fromJson(getRequest(), TypeC.class);
}
答案 2 :(得分:1)
你可以创建三个响应类的超类。
public class Response { ... }
public class ResponseSubClass0 extends Response{ ... }
public class ResponseSubClass1 extends Response{ ... }
public class ResponseSubClass2 extends Response{ ... }
然后将您的方法定义为返回Response。
public Response getResponse(){
//do stuff
return response; //can be any of the subclass types
}
在使用getResponse()
的任何代码块中,如果您需要特定类的细节,可以使用typeof
来检查它是哪一个。
Response r = foo.getResponse();
if(r instanceof ResponseSubClass0){
ResponseSubClass0 rsc0 = (ResponseSubClass0)r;
//do stuff
}
else if(r instanceof ResponseSubClass1){
ResponseSubClass1 rsc1 = (ResponseSubClass1)r;
//do other stuff
}
else if(r instanceof ResponseSubClass2){
ResponseSubClass2 rsc2 = (ResponseSubClass2)r;
//do other stuff
}
您还可以将Response设置为接口并实现它,而不是扩展超类。