我正在尝试编写一个通用方法来将 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()
一样方法。
你的方法签名应该类似于 Gson 的:
<T> T Deserialize(String json, Class<T> type) ...
您的通话将如下所示:
MyObject obj = helper.Deserialize(json, MyObject.class);
顺便说一句,方法名称以小写字母开头的惯例在 Java 中已经确立。
关于Java 泛型,创建 Class<T> 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62308250/