我有一个非常具体的问题,用于通过gson反序列化泛型。 我使用square otto和tape的组合来排队我用于请求的所有事件。 因此,我使用带有枚举的通用加载数据事件来知道要发送的请求:
public class GenericLoadDataEvent<T> {
private LoadDataEnum mDataEnum;
T mRequestData;
public GenericLoadDataEvent(LoadDataEnum dataEnum, T requestData) {
mDataEnum = dataEnum;
this.mRequestData = requestData;
}
{...}
}
和要序列化的数据保持类:
public class ServerTask implements Task<ServerTask.ServerTaskCallback> {
public static final String TAG = ServerTask.class.getSimpleName();
private LoadDataEnum mDataEnum;
private GenericLoadDataEvent mGenericLoadDataEvent;
public ServerTask(GenericLoadDataEvent event) {
mGenericLoadDataEvent = event;
mDataEnum = event.getDataEnum();
}
{...}
}
序列化到磁带工作得很好但是当我用gson反序列化磁带条目时我总是得到一个com.google.gson.internal.LinkedTreeMap而不是GenericLoadDataEvent中的Object,因为Gson不要知道要用于T requestData Object的类。
我使用GsonConverter进行序列化和反序列化,其中T是ServerTask,在这种情况下:
public class GsonConverter<T> implements FileObjectQueue.Converter<T> {
private final Gson gson;
private final Class<T> type;
public GsonConverter(Gson gson, Class<T> type) {
this.gson = gson;
this.type = type;
}
/**
* Converts bytes to an object.
*
* @param bytes
*/
@Override
public T from(byte[] bytes) throws IOException {
Reader reader = new InputStreamReader(new ByteArrayInputStream(bytes));
return gson.fromJson(reader, type);
}
我现在的问题是 - 如何告诉gson GenericLoadDataEvent中的T mRequestData应该是哪个类?
我尝试过类似的事情:
public class ServerTask<T> implements Task<ServerTask.ServerTaskCallback> {
public static final String TAG = ServerTask.class.getSimpleName();
private LoadDataEnum mDataEnum;
private GenericLoadDataEvent<T> mGenericLoadDataEvent;
public ServerTask(GenericLoadDataEvent event) {
mGenericLoadDataEvent = event;
mDataEnum = event.getDataEnum();
}
但那不起作用。
有什么想法吗?
答案 0 :(得分:0)
本教程将有所帮助。他们为泛型添加了一个类型名称。 http://www.studytrails.com/java/json/java-google-json-serializing-classes-with-generic-type.jsp