1. ホーム
  2. java

[解決済み] java.lang.Integer は java.lang.Long にキャストできません。

2022-02-18 07:34:41

質問

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値を受け取ることができるようにするために、何か提案はありますか?

どのように解決するのですか?

両方 IntegerLong のサブクラスです。 Number ということで、使えるのではないでしょうか。

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

によって返される値がどのようなものであっても動作するはずです。 obj.get("ipInt")Integer 参照または Long を参照してください。となるデメリットがあります。 また の場合、無言で継続します。 ipInt が浮動小数点数として指定されている場合(例. "ipInt": 1.5 のように、JSONの中で例外を投げることができます。

あなたは できる 使用 instanceof をチェックするために、代わりに LongInteger を具体的に説明すると、かなり不格好になります。