我应该在我的Web服务中接收长整数。
long ipInt = (long) obj.get("ipInt");
当我测试程序并设置ipInt值= 2886872928时,它给了我成功。 但是,当我测试程序并将ipInt值设置为167844168时,它给我错误:
java.lang.ClassCastException:java.lang.Integer无法转换为java.lang.Long
错误指向上面的代码。
仅供参考,我的数据采用JSON格式:
{
"uuID": "user001",
"ipInt": 16744168,
"latiTude": 0,
"longiTude": 0,
}
有什么建议可以确保我的代码能够同时接收ipInteger值吗?
答案 0 :(得分:3)
Integer
和Long
都是Number
的子类,因此我怀疑您可以使用:
long ipInt = ((Number) obj.get("ipInt")).longValue();
无论obj.get("ipInt")
返回的值是Integer
引用还是Long
引用,都应该起作用。如果在JSON中将ipInt
指定为浮点数(例如"ipInt": 1.5
),它还会 默默地继续运行。例外。
您可以使用instanceof
来专门检查Long
和Integer
,但这很丑陋。
答案 1 :(得分:1)
我们不知道返回的obj.get()
是什么,所以很难确切地说,但是当我使用返回Number
子类的方法时,我发现将其强制转换为Number
更为安全并调用适当的xxxValue()
,而不是让自动拆箱操作抛出ClassCastException
:
long ipInt = ((Number)obj.get("ipInt")).longValue();
那样,您正在对long
进行显式拆箱,并且能够处理可能包含.
的数据,该数据将返回Float
或{{1 }}。
答案 2 :(得分:0)
您提到当您提供整数范围之外的值时,当前方法有效,但当您在整数范围内时,方法将失败。对于API而言,这是一种奇怪的行为,因为您似乎需要自己检查返回类型。您可以做到这一点。通常的方法是使用instanceof
。像
long ipInt;
Object o = obj.get("ipInt");
if (o instanceof Integer) {
ipInt = ((Integer) o).intValue();
} else if (o instanceof Long) {
ipInt = ((Long) o).longValue();
}
答案 3 :(得分:0)
if may_none_value:
objects = MyModel.objects.get(field1=other_value, field2=may_none_value)
else:
objects = MyModel.objects.get(field1=other_value)
还可以。
答案 4 :(得分:0)
public static void main(String[] args) {
JSONObject jo = JSON.parseObject(
"{ \"uuID\": \"user001\", \"ipInt\": 16744168, \"latiTude\": 0, \"longiTude\": 0}");
System.out.println(jo);
long sellerId1 = Long.valueOf(jo.get("ipInt").toString());
//Long sellerId1 = (long)jo.get("ipInt");
System.out.println(sellerId1);
}
答案 5 :(得分:0)
在Kotlin中,我只是使用这个:
val myInt: Int = 10
val myLong = myInt.toLong()