#java #hashmap #gson #classcastexception #bukkit
#java #hashmap #gson #classcastexception #bukkit
Вопрос:
Я пытаюсь поместить 2 целых значения [] в HashMap, однако библиотека gson, которая у меня есть в моих зависимостях maven, задействована, и я не могу понять, почему…
В приведенном ниже коде «x» и «z» являются целыми числами, которые поступают из метода из используемого мной API, которые определенно возвращают целые числа и передаются через параметры в методе и утверждениях.connectionMap является общедоступным и статическим в основном классе.
Integer[] set = {x, z};
Claims.connectionMap.put(set, set); // LINE 110
И это connectionMap:
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)
Любая помощь будет принята с благодарностью, большое вам спасибо 🙂
Комментарии:
1. Используйте ArrayList вместо array.
2. У меня все еще была та же проблема с этим, мне удалось решить ее, как рекомендовано для использования строк 🙂
Ответ №1:
Gson десериализуется Map<Integer[], Integer[]> map
, используя свою собственную LinkedTreeMap
реализацию, которая требует ключей для реализации Comparable
интерфейса.
Integer[]
является массивом, поэтому он не реализует Comparable
интерфейс и не может быть использован в качестве ключа. Я не уверен, почему вы используете массивы в качестве ключей, поскольку JSON обычно использует String
ключи.