Каково правильное положение литералов в Сравнении строк?

Я имею

if (localName.equals("TaxName")) {

но PMD заявляет

Position literals first in String comparisons
10
задан Glorfindel 17 July 2015 в 21:20
поделиться

4 ответа

"TaxName".equals(localName) лучше, так как если localName равен null, вы не получите исключение нулевого указателя.

26
ответ дан 3 December 2019 в 13:50
поделиться

PMD также должен сообщить вам почему он генерирует это предупреждение. Из документации по правилам на сайте PMD:

Расположите литералы первыми в сравнениях строк - таким образом, если строка будет нулевой, вы не получите NullPointerException, а просто вернете false.

8
ответ дан 3 December 2019 в 13:50
поделиться

Я предпочитаю позиционировать литералы первыми, т.е. :

if ("TaxName".equals(localName)) { ...

Таким образом вы сделаете правильное сравнение для случая null, а не получите NullPointerException.

5
ответ дан 3 December 2019 в 13:50
поделиться

Лично для меня это не имеет смысла. Если код перехватывает исключение NullPointerException, то он выполняет работу, которую вам не придется выполнять позже. Если localName в конечном итоге будет равен null, и это вызовет проблему позже, то его будет сложнее отследить. Не изменяйте код, чтобы сделать компилятор счастливым. Если код выдает исключение NullPointerException, то он экономит время отладки позже.

2
ответ дан 3 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: