Я использую PMD , чтобы проверить мой код. Это дает мне очень полезные советы в большинстве случаев, но я не могу понять, что можно улучшить в следующем сценарии.
Исходный код выглядит примерно так:
if ((getSomething() != null && getSomethingElse() != null)
|| (getSomething() == null && getSomethingElse() == null))
{
...
}
PMD говорит мне:
Иногда два оператора «если» можно объединить, разделив их
условия с логическим оператором короткого замыкания.
Для простоты, давайте просто используем a и b в качестве логических переменных. Тогда этот фрагмент кода выглядит так:
if ((!a && !b) || (a && b))
Это может быть преобразовано в одно из следующих:
if ((!a || b) && (a || !b))
if (!(a^b))
и, наконец,
if (a==b)
Итак, я упростил свой код до
if ((getSomething() == null) == (getSomethingElse() == null))
Однако PMD продолжает жаловаться (фактически, на все три версии). Это ложное срабатывание или есть лучший способ написать условие if?