java.lang.Integer 不能强制转换为 java.lang.Long

2022-09-01 15:26:34

我应该在我的Web服务中接收长整数。

long ipInt = (long) obj.get("ipInt");

当我测试我的程序并将ipInt值= 2886872928时,它会给我带来成功。但是,当我测试我的程序并将ipInt值= 167844168时,它会给我错误:

java.lang.ClassCastException: java.lang.Integer 不能 cast to java.lang.Long

错误指向上述代码。

仅供参考,我的数据是JSON格式:

{
    "uuID": "user001",
    "ipInt": 16744168,
    "latiTude": 0,
    "longiTude": 0,
}

有什么建议,这样我就可以确保我的代码能够同时接收两个ipInteger值?


答案 1

和 都是 的子类,所以我怀疑你可以使用:IntegerLongNumber

long ipInt = ((Number) obj.get("ipInt")).longValue();

无论 返回的值是引用还是引用,这都应该有效。它的缺点是,如果在JSON中被指定为浮点数(例如),它也将静默地继续,您可能希望在其中引发异常。obj.get("ipInt")IntegerLongipInt"ipInt": 1.5

你可以用它来检查和具体,但它会非常丑陋。instanceofLongInteger


答案 2

我们不知道返回什么,所以很难确切地说,但是当我使用返回子类的这些方法时,我发现将其转换为并调用适当的方法更安全,而不是让自动开箱抛出:obj.get()NumberNumberxxxValue()ClassCastException

long ipInt = ((Number)obj.get("ipInt")).longValue();

这样,您就可以对 a 进行显式取消装箱,并且能够处理可能包含 的数据,这些数据将返回 a 或。long.FloatDouble


推荐