Java泛型,创建类的实例<;T>;

Java泛型,创建类的实例<;T>;,java,class,generics,types,Java,Class,Generics,Types,我试图编写一个通用方法,将json反序列化到我的模型中。我的问题是,我不知道如何从泛型类型t获取类。我的代码看起来像这样(并且不是以这种方式编译) public类JsonHelper{ 公共T反序列化(字符串json) { Gson Gson=新的Gson(); 返回gson.fromJson(json,类); } } 我尝试了其他方法来获取类型,但它抛出了一个错误,我将类设置为JsonHelper,然后尝试了这个方法 Class<T> persistentClass = (Cla

我试图编写一个通用方法,将json反序列化到我的模型中。我的问题是,我不知道如何从泛型类型t获取类。我的代码看起来像这样(并且不是以这种方式编译)

public类JsonHelper{
公共T反序列化(字符串json)
{
Gson Gson=新的Gson();
返回gson.fromJson(json,类);
}
}
我尝试了其他方法来获取类型,但它抛出了一个错误,我将类设置为
JsonHelper
,然后尝试了这个方法

Class<T> persistentClass = (Class<T>) ((ParameterizedType)getClass()
    .getGenericSuperclass())
    .getActualTypeArguments()[0];
Class persistentClass=(类)((ParameterizedType)getClass()
.getGenericSuperclass())
.getActualTypeArguments()[0];
方法签名如下所示

com.google.gson.Gson.fromJson(String json, Class<T> classOfT)
com.google.gson.gson.fromJson(字符串json,类ClassSoft)

那么,当我调用
JsonHelper.Deserialize(json)时,如何沿着T进行翻译我得到了一个正确对象的实例?

不幸的是,Java处理泛型的方式无法像您所要求的那样得到类。这就是为什么谷歌的东西特别要求将类作为一个参数。您必须修改您的方法签名才能执行相同的操作。

您需要从某处获得一个
实例。也就是说,您的
反序列化()
方法需要将
作为参数,就像底层的
fromJson()
方法一样

您的方法签名应类似于Gson的:

<T> T Deserialize(String json, Class<T> type) ...

顺便说一句,用小写字母开始方法名的约定在Java中已经很成熟。

我不确定这是否可行。如果是的话,为什么GSon类不直接执行并远程调用class参数呢?Josh,我搜索并回答了同一个问题,但没有找到答案。我最终做了下面两个答案的建议。我主要来自.net的背景,正是在那里我学会了编码实践。:)@乔希:当然,如果来自另一种语言的人开始使用他们习惯的风格,这是可以理解的。也就是说,最好是学习并尝试将您的代码样式与您使用的语言的标准保持一致。
<T> T Deserialize(String json, Class<T> type) ...
MyObject obj = helper.Deserialize(json, MyObject.class);