java.lang.Integerのはjava.lang.Longのにキャストすることはできません

inayzi:

私は自分のWebサービスでの長い整数を受け取ることになっています。

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

私は私のプログラムをテストし、ipInt値= 2886872928を入れたとき、それは私に成功を与えます。私は私のプログラムをテストし、ipInt値= 167844168を置くときしかし、それは私にエラーを与えます:

java.lang.ClassCastExceptionが:java.lang.Integerのがjava.lang.Longのにキャストすることはできません

エラーは、上記のコードをポイントしています。

FYI、私のデータはJSON形式であります:

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

私は両方のipInteger値を受け取ることができる私のコードを確保することができるように任意の提案はありますか?

ジョンスキート:

両方IntegerLongのサブクラスですNumberので、私はあなたが使用することができます疑いがあります、:

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

すなわち、によって返される値かどうか動作するはずobj.get("ipInt")であるInteger基準又はLong参照。それはすることが欠点があるにもあれば、静か続けるipInt浮動小数点数(例えばとして指定されている"ipInt": 1.5あなたの代わりに例外をスローする場合がありますJSON、中に)。

あなたは可能性が使用instanceofをチェックする代わりに、LongInteger具体的には、それはかなり醜いだろう。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=312955&siteId=1