Какова правильная позиция литералов при сравнении строк?
У меня есть
if (localName.equals("TaxName")) {
Но PMD говорит
Position literals first in String comparisons
5 ответов:
"TaxName".equals(localName)
лучше, еслиlocalName
равно null, вы не получите исключение null-указателя.
PMD также должен сообщить вам , Почему он генерирует это предупреждение. Из документации по правилам на веб-сайте PMD:
Сначала расположите литералы в строковых сравнениях - таким образом, если строка равна null, вы не получите исключение NullPointerException, оно просто вернет false.
Я предпочитаю сначала расположить литералы, т. е.:
if ("TaxName".equals(localName)) { ...
Таким образом, Вы делаете правильное сравнение для случая null, вместо получения NullPointerException.
Лично, это не имеет смысла для меня. Если код ловит исключение NullPointerException, то это проделанная работа, которую вам не придется делать позже. Если localName в конечном итоге становится null, и это вызывает проблему позже, то его будет сложнее отследить. Не меняйте код, чтобы сделать компилятор счастливым. Если ваш код вызывает исключение NullPointerException, то это сэкономит вам время отладки позже.