如何使用gson处理泛型类型?

问题描述

我创建了一个封装gson序列化/反序列化行为的类。想法是使类完全通用,以便可以在需要它的软件的任何部分使用它。

public class JsonParser {
    private static final Logger log = Logger.getLogger(JsonParser.class.getName());
    
    private static final Gson gson = new Gson();
    
    public static String convertToJson(Object object) {
        String result = gson.toJson(object);
        log.log(Level.INFO,"Result: {0}",result);
        return result;
    }
    
    public static <T extends Object> T convertToString(String jsonString,Class<T> object) {
        Type type = new TypeToken<T>() {}.getType();
        T result = gson.fromJson(jsonString,type);
        log.log(Level.INFO,result.toString());
        return result;
    }
}

我在反序列化方面遇到问题(方法convertToString)。这行代码:T result = gson.fromJson(jsonString,type);在编译时抛出此错误:

“无法确定T的类型参数;对于具有上限T,java.lang.Object的类型变量T,不存在唯一的最大实例”

我了解这意味着代码太模糊且不安全。在此版本之前,我传递了名为 object 的参数而不是变量 type 的参数,但问题是返回的对象有问题,并在代码执行后抛出NullPointerException。我读了有关Gson和泛型类型的问题的书,所以我进入了实际版本。

以防万一,这是对有问题的方法的调用(响应是一个字符串):

JsonParser.convertToString(response,Response.class);

所以问题是:我该如何进行编译并使我的方法具有通用性?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)