проверка условия в java приводит к ошибке - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующий фрагмент кода, в котором при условии, что я получаю результаты сонара, то есть строковые литералы, должны быть размещены слева при проверке на равенство. Посоветуйте пожалуйста как это побороть.

final String aviid = avcMaster.getAVMaster().getAviiId();
if ((!aviid.equals("44")) || (!aviid.equals("55"))) { // ** Sonar Issue **//
    final String defaultAiId = "88";
    deviceElement.setAttribute("avi", defaultAiId);
}
else{
    deviceElement.setAttribute("avi", aviid);
}

1 Ответ

3 голосов
/ 07 апреля 2020

Сравнение между String переменной и String литералом

  • вызовом метода для переменной: если переменная равна нулю, вы получите NullPointerException

    aviid.equals("44") 
    
  • вызов метода для литерала: вы не можете получить NPE, и у вас будет false в случае, если переменная содержит null

    "44".equals(aviid)
    

Сонар предупреждает вас, потому что для него лучше получить ложь, чем NPE, но код - ваш выбор.


Также ваш тест неверен, потому что он всегда будет правда, поскольку у вас не может быть 44 и 55 одновременно, одно из них будет верным, вы наверняка имели в виду &&, и вам лучше сделать это иначе, вам не понадобится отрицание.

if ((!aviid.equals("44")) && (!aviid.equals("55"))) { 

И сделать это короче (из комментариев)

deviceElement.setAttribute("avi", aviid.matches("44|55") ? aviid : "88");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...