我正在从 Java 访问一个从 Rails 应用程序写入的 MongoDB 实例。我正在检索应该存储在 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 作为整数返回,但我知道某些 ID 可以作为 Longs 出现,并且由于各种原因,我无法更改写入数据库的类型(从另一个应用程序);在某些情况下它可能是 32 位,在其他情况下可能是 64 位。
Java 应用程序需要处理任何一个,我不想遇到某种截断或溢出问题。我想在 Java 方面将其作为 Long 来阅读。
我已经尝试了下面的解决方法,它似乎可以运行,但我不知道我是否可以通过这种方式避免截断或溢出问题。我不确定Number
Java中的类是做什么的。
this.profile_uid = ((Number)this.profile.get("uid")).longValue();
这是合法的吗?它有什么副作用?还有其他/更好的方法吗?