Ошибка приведения длинного типа при чтении поля Integer из MongoDB в Java

. Я получаю доступ к экземпляру MongoDB из Java, который записывается из приложения Rails. Я извлекаю целочисленные значения, которые должны храниться в Long, потому что они могут превышать 32 бита.

Этот код скомпилируется:

this.profile_uid  = (Long)this.profile.get("uid");

Однако я получаю ошибку времени выполнения преобразования типа -:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

Предположительно, это связано с тем, что Mongo возвращает поле как целое число, но я знаю, что некоторые идентификаторы могут быть длинными, и по разным причинам я не могу изменить тип, который записывается в БД (из другого приложения ); в некоторых случаях это может быть 32 -бита, а в других — 64 -бита.

Приложение Java должно обрабатывать и то, и другое, и я не хочу сталкиваться с какой-то проблемой усечения или переполнения. Я хочу прочитать это как Long на стороне Java.

Я попробовал обходной путь, описанный ниже, и, похоже, он работает, но я не знаю, защищен ли я таким образом от проблем с усечением или переполнением. Я не уверен, что делает класс Numberв Java.

this.profile_uid  = ((Number)this.profile.get("uid")).longValue();

Это законно? Какие побочные эффекты он имеет? Есть ли другой/лучший способ?

9
задан Wolfram Arnold 2 July 2012 в 02:15
поделиться