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

标签 java class generics types

我正在尝试编写一个通用方法来将 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/

相关文章:

c# - 使用泛型将类和方法名称动态传递给方法

class - haskell 。使用约束来定义类的实例

java - 泛型:通配符类型的编译错误

用于下载文件或 zip 文件的 Java 代码

java - 设置交集

java - 是否可以找到如果. Elasticsearch 文档中的单个属性被修改

java - 计算直线与 x 轴之间的角度

c++ - 如何初始化作为类成员的数组?

python - 哪种创建类属性的方法更好,为什么?

java - 方法不覆盖抽象父类(super class)