Java >> Java tutorial >  >> Tag >> java.lang

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.


Java tag