2010-05-04 3 views
-2
e.getCategory() != null ? e.getCategory().getName() : ""; 

Cela jette un NullPointerException et je ne comprends pas pourquoi. Quelqu'un peut-il expliquer?Pourquoi cela lance-t-il NullPointerException?

+2

Veuillez publier une trace de pile complète de votre exception NullPointerException. Cela devrait aider à révéler exactement où le problème se produit. –

+2

Juste un conseil: en Java, il est généralement considéré comme une bonne pratique de placer un espace de chaque côté de la plupart des opérateurs, comme '! =', '?' Et ':'. Cela rend le code beaucoup plus lisible. – Syntactic

+1

merci pour l'astuce – GorillaApe

Répondre

6

Explication:

Selon les règles de priorité de Java, votre code est en cours d'analyse comme ceci:

(("\"category\":" + "\"" + e.getCategory()) != null) ? e.getCategory().getName() : "" 

avec la concaténation entière (("..." + e.getCategory())!= null) comme condition.

Depuis "..." + e.getCategory() n'est jamais null, le code n'a pas fonctionné.

6

e est null.

+0

ce n'est pas nul !! – GorillaApe

+0

(e.getCategory()! = Null) renvoie false ou true et ne lève jamais d'exception – GorillaApe

+3

** Ensuite, il y a un problème à l'intérieur de 'getName()'. ** – SLaks

1

Est-ce que e est nul?

Peut-être que vous devriez essayer ceci:

(e != null) ? 
    (e.getCategory() != null) ? 
     e.getCategory().getName() : 
     "" 
    : "" 

Ou plutôt, une forme simplifiée:

(e != null && e.getCategory() != null) ? 
    e.getCategory().getName() : 
    "" 
+2

Il existe une raison pour laquelle les instructions existent ... 'if (e! = null && e.getCategory()! = null && ...) ...' –

+0

Mais les expressions trinaires sont funner ! :-) – amphetamachine

0

Solution trouvée ....

CORRECT

bufo.append("\"category\":" + "\"" + ((e.getCategory() != null) ? e.getCategory().getName() : "") + "\","); 

PROBLÈME

bufo.append("\"category\":" + "\"" + e.getCategory()!=null?e.getCategory().getName():"" + "\","); 
+1

il semble qu'il a besoin() pour une raison quelconque – GorillaApe

+1

Il a besoin() parce que sinon vous testez la chaîne "category": "null au lieu de tester la référence réelle, qui est nulle. Le compilateur suppose que vous testez le résultat –

+1

Cela fait qu'il est parfois préférable de simplifier l'expression en utilisant une variable temporaire.Même si vous connaissez les règles de priorité d'opérateur à froid, le prochain slob pauvre en lisant votre code peut ne pas ... –

Questions connexes