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

乔希:

我正在尝试编写一种将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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章