. Я получаю доступ к экземпляру 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();
Это законно? Какие побочные эффекты он имеет? Есть ли другой/лучший способ?