繁体   English   中英

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

[英]How to use Type interface to pass while class initialization of generic<T>?

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

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

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

由于此代码未开放更改,因此我扩展了此类并覆盖了parse response方法。 我还创建了一个名为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(interface)进行传递,以便当有人调用getResponseData时,它返回在setType中传递的类型的对象,而不是通用Object?

就像是

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

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

我如何使用mType在“ ???”位置传递

我认为,您可以在此处使用TypeToken 它包含在Gson中,应该这样。

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

gson.fromJson(json, responseType);

您可以在这里进一步阅读

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM