Код ниже: < /p>
Код: Выделить всё
package io.itch.mgdsstudio.kingdom.game.gameobjects.controllers.deaths;
import io.itch.mgdsstudio.engine.libs.DeserializationOnly;
import java.util.HashMap;
import java.util.Map;
public final class DeathsDataStruct {
private final HashMap deathsMap = new HashMap();
@DeserializationOnly
public DeathsDataStruct() {
}
public void increaseDeathsCount(int mapNumber){
for (Map.Entry entrySet : deathsMap.entrySet()){
//! WHY FALLS with ClassCastException at the next line?
Integer existingMap = entrySet.getKey();
int existing = existingMap;
if (existing == mapNumber){
entrySet.setValue(entrySet.getValue()+1);
return;
}
}
deathsMap.put(mapNumber, 1);
}
}
< /code>
Описание исключений указывает на строку:
Integer existingMap = entrySet.getKey();Полный текст исключения ниже:
Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')
at io.itch.mgdsstudio.kingdom.game.gameobjects.controllers.deaths.DeathsDataStruct.increaseDeathsCount(DeathsDataStruct.java:19)
at io.itch.mgdsstudio.kingdom.game.gameobjects.controllers.deaths.DeathsDataStructManager.increaseCount(DeathsDataStructManager.java:40)
at io.itch.mgdsstudio.kingdom.game.gameobjects.controllers.deaths.DeathsCounterController.update(DeathsCounterController.java:28)
at io.itch.mgdsstudio.kingdom.game.gameprocess.GameRound.update(GameRound.java:151)
at io.itch.mgdsstudio.kingdom.game.gameprocess.GameProcess.update(GameProcess.java:105)
at io.itch.mgdsstudio.kingdom.menu.GameScreen.render(GameScreen.java:77)
at com.badlogic.gdx.Game.render(Game.java:48)
at io.itch.mgdsstudio.kingdom.ApplicationManager.render(ApplicationManager.java:83)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:387)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:192)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:166)
at io.itch.mgdsstudio.kingdom.DesktopGdxLauncher.main(DesktopGdxLauncher.java:72)
< /code>
Пример этого класса создается с помощью следующего кода: < /p>
private void loadActual() {
WrapperFileHandle wrapperFileHandle = WrapperFileHandle.create();
String relativePath = getRelativePath();
var fileInSaves = wrapperFileHandle.getExternal(relativePath);
if (fileInSaves.exists()){
WrapperJsonLoader wrapperJsonLoader = WrapperJsonLoader.create();
this.deathsDataStruct = wrapperJsonLoader.loadFromExternal(relativePath, DeathsDataStruct.class);
}
else {
deathsDataStruct = new DeathsDataStruct();
}
}
< /code>
... и когда этого файла не было - все нормально. Но когда этот пример создается с использованием json-deserialization-я получаю это исключение.Integer existingMap = Integer.parseInt(String.valueOf(entrySet.getKey()));
< /code>
это работает. Почему эта карта содержит строку, но компилятор думает - это целое число?
Подробнее здесь: https://stackoverflow.com/questions/796 ... texception