Wol*_*old 9 java casting mongodb long-integer
我正从Java中访问一个从Rails应用程序写入的MongoDB实例.我正在检索应存储在Long中的整数值,因为它们可能超过32位.
这段代码将编译:
this.profile_uid = (Long)this.profile.get("uid");
Run Code Online (Sandbox Code Playgroud)
但是,我收到类型转换运行时错误:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Run Code Online (Sandbox Code Playgroud)
这可能是因为Mongo将字段作为Integer返回,但是我知道一些ID可以作为Longs出现,并且由于各种原因我无法更改写入DB的类型(来自另一个应用程序); 在某些情况下它可能是32位而在其他情况下可能是64位.
Java应用程序需要处理任何一个,我不想遇到某种截断或溢出问题.我想在Java端将其读作Long.
我已经尝试了下面的解决方法,它似乎运行,但我不知道我是否可以通过这种方式避免截断或溢出问题.我不确定NumberJava中的类是什么.
this.profile_uid = ((Number)this.profile.get("uid")).longValue();
Run Code Online (Sandbox Code Playgroud)
这是合法的吗?它有什么副作用?还有其他/更好的方法吗?
您建议的解决方法是合法的.Number是Java中所有数字类的超类.如果您的"uid"字段是数字格式,this.profile.get("uid"))则返回一个对象,该对象是某个子类Number(因此,转换Number将始终有效).
所有具体的子类Number必须实现该longValue()方法,因为它被定义为类中的抽象方法Number.
Integer.longValue()将其内部int值转换为long.
Long.longValue()只返回其内部长值.
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |