我应该在我的网络服务中收到长整数。
long ipInt = (long) obj.get("ipInt");
Run Code Online (Sandbox Code Playgroud)
当我测试我的程序并设置 ipInt 值 = 2886872928 时,它给了我成功。但是,当我测试我的程序并设置 ipInt 值 = 167844168 时,它给了我错误:
java.lang.ClassCastException: java.lang.Integer 不能转换为 java.lang.Long
错误是指向上面的代码。
仅供参考,我的数据是 JSON 格式:
{
"uuID": "user001",
"ipInt": 16744168,
"latiTude": 0,
"longiTude": 0,
}
Run Code Online (Sandbox Code Playgroud)
有什么建议可以确保我的代码能够接收两个 ipInteger 值吗?
Jon*_*eet 32
这两个Integer和Long是的子类Number,所以我怀疑,你可以使用:
long ipInt = ((Number) obj.get("ipInt")).longValue();
Run Code Online (Sandbox Code Playgroud)
无论返回的值obj.get("ipInt")是Integer引用还是Long引用,这都应该有效。它有缺点,它会还是否继续默默ipInt已被指定为浮点数(如"ipInt": 1.5在JSON),在那里你可能要抛出一个异常,而不是。
您可以改用专门instanceof检查Long和检查Integer,但这会非常难看。
我们不知道obj.get()返回什么,所以很难准确地说,但是当我使用此类返回Number子类的方法时,我发现将其转换为Number并调用适当的方法更安全xxxValue(),而不是让自动拆箱抛出ClassCastException:
long ipInt = ((Number)obj.get("ipInt")).longValue();
Run Code Online (Sandbox Code Playgroud)
这样,您就可以对 a 进行显式拆箱long,并且能够处理可能包含 a 的数据.,这将返回 aFloat或Double。