2017-06-12 5 views
0

Je le code suivant:Gson isJsonObject() renvoie NullPointerException

final JsonObject source = source.toJson(); 
final JsonElement relatedSpace = source.get("myField"); 
if(relatedSpace.isJsonObject()){ 
    //do something 
} 

isJsonObject() fait return instanceof JsonObject; selon le code Gson. instanceof devrait faire un null vérifier d'abord, donc je ne sais pas comment il est possible que mon code lance un NullPointerException lorsque relatedSpace est null. Je peux facilement vérifier d'abord null pour résoudre le problème, mais je me demande pourquoi cela se produit.

Répondre

2

L'opérateur . est exécuté avant après la méthode.

Si l'objet est null cela provoquera un NullPointerException, quel que soit le contenu de la méthode.

1

Parce que relatedSpace est défini sur null (avant de l'utiliser) dans la situation que vous décrivez ici. Vous obtenez en fait null de l'expression suivante -

final JsonElement relatedSpace = source.get("myField"); 

(Cela signifie que toi est pas JsonElement avec associé à la clé « myField »)

Pour éviter null vous pouvez tout simplement vérifier avant de l'utiliser -

if(null!=relatedSpace && relatedSpace.isJsonObject()){ 
    //do something 
} 

pour en savoir plus sur la façon d'éviter NullPointerException vous pouvez vérifier these nice suggestions

0

Vous obtenez NPE car vous effectuez un appel de méthode sur une référence null. Ce qui vous est confus est entre l'opérateur et les méthodes dans Java. instanceof est un opérateur en java qui fonctionne aussi avec des références nulles mais les appels de méthode sur une référence nulle est une condition exceptionnelle et doit être gérée par null check.Other autre chose que vous pouvez faire est de laisser tomber la méthode GSON complètement et faire une instance directe de vérifier.