web-dev-qa-db-ja.com

java.lang.IntegerはJava.lang.Longにキャストできません

Webサービスでlong integerを受け取ることになっています。

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値を受信できるようにするための提案はありますか?

5
inayzi

整数の範囲外の値を指定すると現在のアプローチが機能するが、整数の範囲内にあると失敗する、と述べました。戻り値の型を自分で確認することは必要と思われるため、これはAPIの奇妙な動作です。あなたはcanします。通常は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();
}
0
Elliott Frisch