if (localName.equals("TaxName")) {
但PMD說
Position literals first in String comparisons
if (localName.equals("TaxName")) {
但PMD說
Position literals first in String comparisons
我寧願位置文字第一,即:
if ("TaxName".equals(localName)) { ...
這樣,你做的不是得到NullPointerException異常爲空的情況下,正確的比較。
PMD也應該告訴你爲什麼它會產生這個警告。從the rules documentation的PMD網站:
位置文本首先在字符串比較 - 如果String爲null,你不會得到一個NullPointerException這種方式,它只會返回false。
在某些情況下,如果一個變量爲空,代碼應該將它視爲不等於一個字符串,而在其他情況下,它表示一個問題,並且標記問題越快,越好;在後一種情況下,'variable .equals(「literal」)'更好,因爲它會在變量爲空時陷阱。 – supercat 2014-05-03 02:50:36
個人而言,這對我沒有意義。如果代碼捕獲到一個NullPointerException,那麼它就完成了以後不需要做的工作。如果localName最終爲null,並且稍後會導致問題,那麼跟蹤會更困難。不要更改代碼以使編譯器高興。如果你的代碼拋出一個NullPointerException,那麼以後它會保存你的調試時間。
我完全不同意,絕對寧願編寫'CONSTANT.equals(變量)'而不是做初步的'null'檢查 – 2010-06-23 21:01:07
If localName是空的,你稍後嘗試使用它會得到與原始代碼完全相同的效果,即NPE。但更重要的是,應該始終讓編譯器高興 - 它知道它在做什麼,我甚至會推薦進入所選IDE的編譯器設置並升級所有這些c ompiler警告錯誤。 – CurtainDog 2010-06-23 21:05:54
@CurtainDog將編譯器警告升級爲錯誤將有效拖延我公司一年的生產力。我敢肯定90%的人會同意。我並不是說你原則上不對,因爲這些警告經常變成錯誤,我只是說,說起來容易做起來難。 – corsiKa 2010-06-23 21:17:20
爲了避免這種警告,一個簡單的解決方案是之前,至極的我們管理,每一個對象,建議檢查nullpointers不僅在這個情況下:
if (localName!=null && localName.equals("TaxName")) {
...
}
好吧,如果PMD抱怨文字在右邊,我不認爲你有更多的選擇,而不是把它們放在左邊(又名[亞達條件](http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined/2430307#2430307)風格):) – 2010-06-23 20:58:53