TreeMap ClassCastException - PullRequest
       12

TreeMap ClassCastException

0 голосов
/ 25 апреля 2018

Невозможно определить, откуда происходит приведение типа String, которое вызывает это исключение ClassCastException.Я очистил карту, чтобы она содержала только одну запись (115,1563), и убедился, что оба параметра были целыми числами.

Сначала я читаю из файла и заполняю ScoreMap.

private void populateScoreMap(String toConvert)
{
    Gson gson = new GsonBuilder().create();

    ScoreRecord.scoreMap = (TreeMap<Integer,Integer>) gson.fromJson(toConvert, ScoreRecord.scoreMap.getClass());

}

Класс ScoreRecord

public class ScoreRecord
{
    public static SortedMap<Integer,Integer> scoreMap = new TreeMap<Integer, Integer>();
}

Затем я пытаюсь добавить запись в класс ScoreGraph

private void addTodaysScore() {
    Integer todaysScore = getIntent().getIntExtra("score",0);
    Calendar calendar = Calendar.getInstance();
    Integer dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
    ScoreRecord.scoreMap.put(dayOfYear,todaysScore);
    }

Исключение

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at java.lang.Integer.compareTo(Integer.java:1044)
at java.util.TreeMap.put(TreeMap.java:593)
at com.xxx.xxx.xxx.xxx.ScoreGraph.addTodaysScore(ScoreGraph.java:63)

1 Ответ

0 голосов
/ 26 апреля 2018

Проблема в том, что результатом ScoreRecord.scoreMap.getClass() является класс Java, который не содержит информацию, относящуюся к универсальным. В вашем конкретном случае это просто SortedMap, что эквивалентно SortedMap<Object, Object>, а не SortedMap<Integer, Integer>.

Что вам нужно сделать, это создать то, что Gson называет «токен типа». Это даст Gson необходимые подсказки для успешного анализа вашей коллекции:

private void populateScoreMap(String toConvert)
{
    Gson gson = new GsonBuilder().create();
    Type collectionType = new TypeToken<SortedMap<Integer, Integer>>(){}.getType();

    ScoreRecord.scoreMap = gson.fromJson(toConvert, collectionType);
}

Это также объясняется в документации Гсона

...