如何在泛型<t>的类初始化时使用Type接口传递?

时间:2017-10-11 18:54:53

标签: java android

我们正在使用GSON解析okhttp响应对象。

为了允许通用的解析逻辑,我们打开了使用setType(Type type)传递一种响应,现在使用下面的代码来解析所有响应。

Object mResponse = mGson.fromJson(response.body().string(), mType);

由于此代码未打开进行更改,因此我扩展了此类并重写了解析响应方法。我还创建了一个名为MyRespose的新类,并希望使用setType方法中传递的任何类型进行初始化,以便向使用者返回它们传递的类型的对象,而不是Object类的实例。

public class MyResponse<T> {

    private int mStatus;

    private T mResponseData;

    public MyResponse(int status, T responseBody) {
        this.mStatus = status;
        mResponseData = responseBody;
    }

    public MyResponse(T responseBody) {
        mResponseData = responseBody;
    }

    public int getStatus() {
        return mStatus;
    }

    public void setStatus(int status) {
        this.mStatus = status;
    }

    public T getResponseData() {
        return mResponseData;
    }

    public void setResponseData(T responseData) {
        mResponseData = responseData;
    }
}

如何使用Type(接口)传递,以便当有人调用getResponseData时它返回在setType而不是通用Object中传递的类型的对象?

这样的东西
Object mResponse = mGson.fromJson(response.body().string(), mType);

mMyResponse = new MyResponse<???>(response.code(), mResponse );

我如何使用mType来传递&#34; ???&#34;

1 个答案:

答案 0 :(得分:0)

我想,你可以在这里使用TypeToken。它包含在Gson中,应该是这样的。

Type responseType = new TypeToken<MyResponse<XYZ>>() {}.getType();

gson.fromJson(json, responseType);

您可以在此here

上进一步阅读