Вместо того, чтобы приводить int к long, я бы предложил:
return null == input.get(keyName) ? 0L : Integer.toUnsignedLong(input.get(keyName))
По крайней мере, таким образом вы должны получить больше информации о том, почему его нельзя преобразовать в long, а не просто в ClassCastException
Обновление ответа
На основании ваших комментариев, я думаю, вам придется проверить тип записи в Map, прежде чем обрабатывать ее, я бы предложилследующее:
Object keyValue = input.get(keyName);
if (null == keyValue) return 0L;
String valueType = keyValue.getClass().getTypeName();
if (valueType.equals(Long.class.getTypeName())) {
return (long) keyValue;
}
if (valueType.equals(Integer.class.getTypeName())) {
return Integer.toUnsignedLong((int) keyValue);
}
throw new TypeMismatchException(String.format("Type '%s' is not supported...", valueType));
Это позволит вам определять разные операции для разных типов ввода, его можно распространить на любые типы, которые вы хотите поддерживать.Вы также можете настроить выбрасываемое исключение, чтобы предоставить вам соответствующую информацию.
В приведенном выше фрагменте показан фактический тип, чтобы вы могли расширить свой код для поддержки этого типа или выяснить, почему что-то такого типа попало в вашу карту.
Следует отметить, чтовероятно, было бы лучше сделать это, когда данные вводятся в карту, а не когда они вынимаются из карты.В этом случае вы сможете сменить карту на тип.Всегда лучше санировать ваши вменения, чем пытаться справиться с путаницей смешанных типов данных на более позднем этапе.