java.lang.Integer kan ikke castes til java.lang.Long
Begge Integer
og Long
er underklasser af Number
, så jeg formoder, at du kan bruge:
long ipInt = ((Number) obj.get("ipInt")).longValue();
Det burde virke, uanset om værdien returneres af obj.get("ipInt")
er en Integer
reference eller en Long
reference. Det har den ulempe, at det også vil fortsæt stille, hvis ipInt
er blevet angivet som et flydende decimaltal (f.eks. "ipInt": 1.5
) i JSON, hvor du måske ønsker at smide en undtagelse i stedet for.
Du kunne brug instanceof
i stedet for at tjekke efter Long
og Integer
specifikt, men det ville være ret grimt.
Vi ved ikke hvad obj.get()
returnerer, så det er svært at sige præcist, men når jeg bruger sådanne metoder, returnerer Number
underklasser, finder jeg det mere sikkert at caste det til Number
og ring til den relevante xxxValue()
, i stedet for at lade auto-unboxing kaste ClassCastException
:
long ipInt = ((Number)obj.get("ipInt")).longValue();
På den måde laver du eksplicit unboxing til en long
, og er i stand til at håndtere data, der kunne omfatte en .
, som ville returnere en Float
eller Double
i stedet.