返回不同类型对象的方法

时间:2018-03-14 01:03:09

标签: java android design-patterns android-volley gson

我正在使用gson和volley进行http get请求。我的想法是让一个方法返回一个包含序列化JSON的对象。

public responseHolder getRequest(){
    //Make call
    //Parse Json into JsonObject
    return responseHolder;
}

我的问题是我希望该方法可以使用不同的api调用返回不同的数据。我有3个类,旨在存储3个不同的调用,我希望该方法返回正确类型的对象。是否有一种方法或设计模式可以帮助我在这种情况下,或者我应该从一个不同的角度来处理它?<​​/ p>

3 个答案:

答案 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设置为接口并实现它,而不是扩展超类。