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

這會拋出一個NullPointerException,我不明白爲什麼。誰能解釋一下?爲什麼會拋出NullPointerException?

+2

請發佈您的NullPointerException的完整堆棧跟蹤。它應該幫助確切地揭示問題發生的位置。 – 2010-05-04 13:24:39

+2

只是一個提示:在Java中,通常認爲在大多數操作符的任一側放置一個空格是很好的做法,如'!=','?'和':'。它使這樣的代碼更具可讀性。 – Syntactic 2010-05-04 13:25:34

+1

感謝提示 – GorillaApe 2010-05-04 13:32:54

回答

6

說明:

根據Java的優先規則,你的代碼是被解析如下:

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

與整個級聯(("..." + e.getCategory())!= null)作爲條件。

由於"..." + e.getCategory()從不是null,代碼無法正常工作。

6

enull

+0

它不是零! – GorillaApe 2010-05-04 13:24:00

+0

(e.getCategory()!= null)返回false或true,從不拋出異常 – GorillaApe 2010-05-04 13:24:29

+3

**然後在'getName()'裏面有一個問題。** – SLaks 2010-05-04 13:24:55

1

e null?

也許你應該試試這個:

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

或者說,一個簡單的形式:

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

如果語句存在,則有一個原因...'if(e!= null && e.getCategory()!= null && ...)...' – 2010-05-04 13:29:26

+0

但是三元表達式是funner ! :-) – amphetamachine 2010-05-04 15:17:06

0

發現的解決方案....

正確

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

問題

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

它似乎需要()出於某種原因 – GorillaApe 2010-05-04 13:33:50

+1

它需要()因爲否則你測試字符串「category」:「null而不是測試實際引用,它是null。編譯器假定你測試結果的字符串連接 – 2010-05-04 13:38:07

+1

這使得有時使用臨時變量來簡化表達式會更好,即使您知道運算符優先級規則很冷,下一個可能讀到代碼的可憐的懶漢也許不會...... – 2010-05-04 13:38:24

相關問題