【问题标题】:Gson throwing an error when using a hashmap使用哈希图时 Gson 抛出错误
【发布时间】:2021-01-31 10:56:02
【问题描述】:

我正在尝试将 2 个 Integer[] 值放入 HashMap,但是我的 maven 依赖项中的 gson 库正在参与其中,我无法理解为什么...

在下面的代码中,“x”和“z”都是来自我正在使用的 API 的方法的整数,它们肯定返回整数,并通过方法中的参数传递,并且 Claims.connectionMap 是公共的和静态在主类中。

Integer[] set = {x, z};
Claims.connectionMap.put(set, set); // LINE 110

这是连接图:

public static Map<Integer[], Integer[]> connectionMap = new HashMap<>();

这个哈希图在服务器的每次启动和停止时被导出和导入,但除此之外,我无法完全理解为什么 gson 会用这段代码做任何事情,我在其他地方读到的一篇论坛帖子暗示了它可能是构建时错误,但它可以很好地导入代码(据我所知):这是要导入的代码

Map<Integer[], Integer[]> map;
// a few lines later
map = gson.fromJson(new String(array), Map.class);

但可悲的是,这个错误发生在第一个代码示例的第 110 行

31.01 10:19:23 [Server] INFO Caused by: java.lang.ClassCastException: [Ljava.lang.Integer; is not Comparable
31.01 10:19:23 [Server] INFO at com.google.gson.internal.LinkedTreeMap.find(LinkedTreeMap.java:164) ~[patched_1.16.4.jar:git-Paper-416]
31.01 10:19:23 [Server] INFO at com.google.gson.internal.LinkedTreeMap.put(LinkedTreeMap.java:94) ~[patched_1.16.4.jar:git-Paper-416]
31.01 10:19:23 [Server] INFO at com.eejay.towny.Towny.addConnection(Towny.java:110)

任何帮助将不胜感激,非常感谢你:)

【问题讨论】:

  • 使用 ArrayList 代替数组。
  • 我仍然有同样的问题,但我设法按照建议使用字符串来解决它:)

标签: java hashmap gson classcastexception bukkit


【解决方案1】:

Gson 正在使用它自己的 LinkedTreeMap 实现 which requires keys to implement Comparable interface 反序列化 Map&lt;Integer[], Integer[]&gt; map

Integer[] 是一个数组,因此它没有实现Comparable 接口,也不能用作键。我不确定你为什么使用数组作为键,因为 JSON 通常使用 String 键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 2011-07-16
    • 1970-01-01
    • 2013-07-28
    • 2014-09-03
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多