Когда вы делаете Map<String,Integer> map = (Map) dataSnapshot.getValue();
, вы гарантируете, что map
- это Map
, но не Map<String, Integer>
. Так как генерики стираются и не доступны во время выполнения, пока dataSnapshot.getValue()
является Map
, это приведение будет успешным.
Поскольку вы объявили Hmap
как Map<String,Integer>
, когда вы получите значение с карты, оно попытается привести его к Integer
, но на самом деле ничего не гарантирует на самом деле впереди. время, что это будет целое число . В результате, если значение на самом деле равно Long
, оно попытается привести это Long
к Integer
и завершится неудачно (поскольку Long
не расширяет Integer
, а операции расширения не работают на в штучной упаковке).
Вам необходимо выяснить, каковы действительные типы значений dataSnapshot.getValue()
, и привести его к правильному типу Map
, чтобы избежать этой ошибки.
Подробнее см. Здесь: Странная проблема с операцией Java Generics