java.lang.Integer cannot be cast to java.lang.Long

inayzi :

I'm supposed to receive long integer in my web service.

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

When I test my program and put ipInt value = 2886872928, it give me success. However, when I test my program and put ipInt value = 167844168, it give me error :

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

The error is point to the above code.

FYI, my data is in JSON format :

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

Is there any suggestion so that I can ensure my code able to receive both ipInteger value?

Jon Skeet :

Both Integer and Long are subclasses of Number, so I suspect you can use:

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

That should work whether the value returned by obj.get("ipInt") is an Integer reference or a Long reference. It has the downside that it will also silently continue if ipInt has been specified as a floating point number (e.g. "ipInt": 1.5) in the JSON, where you might want to throw an exception instead.

You could use instanceof instead to check for Long and Integer specifically, but it would be pretty ugly.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=306209&siteId=1