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

Это бросает NullPointerException, и я не понимаю, почему. Может ли кто-нибудь объяснить?Почему это бросает NullPointerException?

+2

Пожалуйста, разместите полную трассировку стека вашего NullPointerException. Это должно помочь точно определить, где проблема. –

+2

Просто подсказка: на Java обычно считается хорошей практикой размещать пространство по обе стороны от большинства операторов, таких как '! =', '?' И ':'. Это делает код более понятным. – Syntactic

+1

спасибо за подсказку – GorillaApe

ответ

6

Объяснение:

Согласно правилам старшинства Java, ваш код был разбираемый, как это:

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

со всей конкатенации (("..." + e.getCategory())!= null) в качестве условия.

С "..." + e.getCategory() никогда не было null, код не работал.

6

e является null.

+0

это не null !! – GorillaApe

+0

(e.getCategory()! = Null) возвращает false или true и никогда не выдает исключение – GorillaApe

+3

** Тогда возникает проблема внутри 'getName()'. ** – SLaks

1

e null null?

Может быть, вы должны попробовать это:

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

или, скорее, упрощенную форму:

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

Существует причина, если существуют утверждения ... 'if (e! = null && e.getCategory()! = null && ...) ...' –

+0

Но триниальные выражения являются funner ! :-) – amphetamachine

0

решение найдено ....

ПРАВИЛЬНО

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

ПРОБЛЕМА

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

Кажется, что ему нужно() по какой-то причине – GorillaApe

+1

Ему нужно(), потому что в противном случае вы проверите строку «category»: «null вместо проверки фактической ссылки, которая равна NULL. Компилятор предположил, что вы проверяете результат конкатенации строк. –

+1

Это делает случай, что иногда проще упростить выражение с помощью временной переменной. Даже если вы знаете, что правила приоритета оператора холодны, следующая бедная слэб, читающая ваш код, может не ... –

Смежные вопросы