gpt4 book ai didi

Java Gson 不兼容的类型

转载 作者:行者123 更新时间:2023-11-29 04:49:23 25 4
gpt4 key购买 nike

我正在使用 Gson 将 POJO 编码和解码为 JSON,但是,Gson 有一些意外行为。

事实上,我有一个看起来像这样的对象

public class MyClass{
public int id;
public Object someData;
}

它的构造函数是 iddata .

我经常传递一个HashMap<Integer, Integer>到 Object,Gson 非常完美地解析了它。问题是解码,它将它解码为 Integer,Double 的 HashMap 即使我这样调用函数:

private HashMap<Integer, Integer> hashMapTemplate = new HashMap<>();
HashMap<Integer, Integer> myData = gson.fromJson(data, hashMapTemplate.getClass());

然后我操作 myData,它抛出一个

ClassCastException: java.lang.Double cannot be cast to java.lang.Integer.


如果我添加显式转换 (int)它抛出一个

ClassCastException: java.lang.String cannot be cast to java.lang.Integer.

我不明白的是,定义为保存两个整数的 HashMap 如何保存 Double 或 String...

有人有解决办法吗?谢谢!

最佳答案

由于类型删除,HashMap 的类对象不管它是否是 HashMap<String, Integer> 都是一样的或 HashMap<Foo, Bar> .事实上,您当前的代码还不如通过 HashMap.classfromJson并完全跳过模板对象。

要保留通用类型,您需要一个 TypeToken :

HashMap<Integer, Integer> h = gson.fromJson(json, new TypeToken<HashMap<Integer, Integer>>() {});

TypeToken 使用了一个巧妙的技巧,利用 Class.getGenericSuperclass() ,因此必须始终将其创建为子类,因此使用内联匿名子类语法。

关于Java Gson 不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35989542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com