我正在尝试创建一个泛型类来使用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的答案,我会假设这应该工作。不幸的是,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);
}
4条答案
按热度按时间mpbci0fu1#
最简单的方法是定义类的类型,它将在方法签名中返回。你可以通过传递一个'T'的示例给方法或者传递一个要返回的值的类来实现。第二种方法在你希望生成一个返回值的情况下更为典型。下面是一个使用Gson的方法的例子:
用法:
tf7tbtn22#
要获得
List<T>
的运行时类型,给定T
类,这会很糟糕,因为JDK认为我们不需要它,所以没有支持。你可以子类化ParameterizedType
,但这真的很糟糕。92dk7w1h3#
我正在使用这些方法来读取和写入对象使用GSON。
"读起来就像"
保存
pobjuy324#
如果您序列化了
GenericClass<T>
这样的泛型对象,则在反序列化时,应提供具有确切类型的 Package 器类,例如:您可以拨打: