Gson在使用散列表时抛出错误

bxfogqkk  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(145)

我试图将2个Integer[]值放入一个HashMap中,但是我在Maven依赖项中得到的gson库正在参与其中,我无法理解为什么...
在下面的代码中,“x”和“z”都是int,它们来自我正在使用的API中的一个方法,它们肯定会返回Integer,并通过方法和Claims中的参数传递。connectionMap在主类中是公共的和静态的。

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

这是连接Map:

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

这个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)

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

xpcnnkqh

xpcnnkqh1#

Gson正在使用它自己的LinkedTreeMap实现来反序列化Map<Integer[], Integer[]> map,该实现需要键来实现Comparable接口。
Integer[]是一个数组,所以它没有实现Comparable接口,不能用作键。我不知道为什么要使用数组作为键,因为JSON通常使用String键。

相关问题