【发布时间】:2011-03-20 19:10:54
【问题描述】:
我正在尝试创建一个用于Google Gson 的通用类。我创建了类GsonJsonConverterImplementation<T>。这个类有如下方法:
public T deserialize(String jsonString) {
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat("MM/dd/yy HH:mm:ss");
Gson gson = builder.create();
return gson.fromJson(jsonString, T); // T.class etc. what goes here
}
目标是该方法应该能够与我设置 GsonJsonConverterImplementation 的任何类型一起使用。不幸的是,gson.fromJson(jsonString, T) 不起作用,使用T.class 代替 T 也不起作用。我确信问题源于我对 Java 泛型类型缺乏了解。在 Gson 中使用泛型的正确方法是什么?
编辑
使用Kris's answer 我认为这应该可行。不幸的是,clazz 不能以这种方式使用并导致编译器错误。使用 Gson 处理集合和泛型类型有哪些选择?
public List<T> deserializeList(String jsonString, Class<T> clazz) {
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat("MM/dd/yy HH:mm:ss");
Gson gson = builder.create();
Type listType = new TypeToken<clazz>(){}.getType(); // compiler error
return gson.fromJson(jsonString, listType);
}
【问题讨论】:
-
我不知道你是否可以让这个(List
-- 可以)与 Gson 一起工作,因为 TypeToken 本质上仍然是一个静态构造(这就是为什么你的代码可以不行)。但是,如果您不是绝对必须使用 Gson,Jackson 确实支持类型的编程创建(通过 TypeFactory 方法)并允许您尝试实现的目标。