我正在尝试编写一种将json反序列化到模型中的通用方法。我的问题是我不知道如何从通用类型T中获取Class。我的代码看起来像这样(并且不这样编译)
public class JsonHelper {
public <T> T Deserialize(String json)
{
Gson gson = new Gson();
return gson.fromJson(json, Class<T>);
}
}
我尝试了其他方法来获取类型,但是它抛出一个错误,因为我拥有该类JsonHelper<T>
,然后尝试了
Class<T> persistentClass = (Class<T>) ((ParameterizedType)getClass()
.getGenericSuperclass())
.getActualTypeArguments()[0];
方法签名看起来像这样
com.google.gson.Gson.fromJson(String json, Class<T> classOfT)
那么,如何沿T转换,以便在我调用时JsonHelper.Deserialize<MyObject>(json);
得到正确对象的实例?
您需要Class
从某个地方获取实例。也就是说,您的Deserialize()
方法需要Class<T>
像基础fromJson()
方法一样将a 作为参数。
您的方法签名应类似于Gson的:
<T> T Deserialize(String json, Class<T> type) ...
您的呼叫将如下所示:
MyObject obj = helper.Deserialize(json, MyObject.class);
顺便说一下,在Java中很好地建立了以小写字母开头的方法名称的约定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句