e.getCategory() != null ? e.getCategory().getName() : "";
這會拋出一個NullPointerException
,我不明白爲什麼。誰能解釋一下?爲什麼會拋出NullPointerException?
e.getCategory() != null ? e.getCategory().getName() : "";
這會拋出一個NullPointerException
,我不明白爲什麼。誰能解釋一下?爲什麼會拋出NullPointerException?
根據Java的優先規則,你的代碼是被解析如下:
(("\"category\":" + "\"" + e.getCategory()) != null) ? e.getCategory().getName() : ""
與整個級聯(("..." + e.getCategory())
!= null
)作爲條件。
由於"..." + e.getCategory()
從不是null
,代碼無法正常工作。
e
是
null
。
它不是零! – GorillaApe 2010-05-04 13:24:00
(e.getCategory()!= null)返回false或true,從不拋出異常 – GorillaApe 2010-05-04 13:24:29
**然後在'getName()'裏面有一個問題。** – SLaks 2010-05-04 13:24:55
是e
null?
也許你應該試試這個:
(e != null) ?
(e.getCategory() != null) ?
e.getCategory().getName() :
""
: ""
或者說,一個簡單的形式:
(e != null && e.getCategory() != null) ?
e.getCategory().getName() :
""
如果語句存在,則有一個原因...'if(e!= null && e.getCategory()!= null && ...)...' – 2010-05-04 13:29:26
但是三元表達式是funner ! :-) – amphetamachine 2010-05-04 15:17:06
發現的解決方案....
正確
bufo.append("\"category\":" + "\"" + ((e.getCategory() != null) ? e.getCategory().getName() : "") + "\",");
問題
bufo.append("\"category\":" + "\"" + e.getCategory()!=null?e.getCategory().getName():"" + "\",");
它似乎需要()出於某種原因 – GorillaApe 2010-05-04 13:33:50
它需要()因爲否則你測試字符串「category」:「null而不是測試實際引用,它是null。編譯器假定你測試結果的字符串連接 – 2010-05-04 13:38:07
這使得有時使用臨時變量來簡化表達式會更好,即使您知道運算符優先級規則很冷,下一個可能讀到代碼的可憐的懶漢也許不會...... – 2010-05-04 13:38:24
請發佈您的NullPointerException的完整堆棧跟蹤。它應該幫助確切地揭示問題發生的位置。 – 2010-05-04 13:24:39
只是一個提示:在Java中,通常認爲在大多數操作符的任一側放置一個空格是很好的做法,如'!=','?'和':'。它使這樣的代碼更具可讀性。 – Syntactic 2010-05-04 13:25:34
感謝提示 – GorillaApe 2010-05-04 13:32:54