[英]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.