gpt4 book ai didi

java - 在 Java 中从 MongoDB 读取 Integer 字段时出现长类型转换错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:52 24 4
gpt4 key购买 nike

我正在从 Rails 应用程序写入的 Java 访问 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 作为 Integer 返回,但我知道某些 ID 可以作为 Longs 出现,并且出于各种原因我无法更改写入 DB 的类型(从另一个应用程序);在某些情况下它可能是 32 位的,在其他情况下可能是 64 位的。

Java 应用程序需要处理其中任何一个,我不想遇到某种截断或溢出问题。我想在 Java 端将它读作 Long。

我已经尝试了下面的解决方法,它似乎可以运行,但我不知道这样是否可以避免截断或溢出问题。我不确定 Java 中的 Number 类是做什么的。

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

这是合法的吗?它有什么副作用?还有其他/更好的方法吗?

最佳答案

您建议的解决方法是合法的。 Number 是 Java 中所有数字类的父类(super class)。如果您的 "uid" 字段是数字格式,this.profile.get("uid")) 将返回一个对象,该对象是 Number(因此转换为 Number 将始终有效)。

Number 的所有具体子类都必须实现 longValue() 方法,因为它在 Number 中定义为抽象方法类(class)。

Integer.longValue() 将其内部 int 值转换为 long。Long.longValue() 仅返回其内部 long 值。

关于java - 在 Java 中从 MongoDB 读取 Integer 字段时出现长类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com