我使用PMD检查我的代码。在大多数情况下,它给了我非常有用的提示,但我不知道在以下情况下可以改进什么。
原始代码如下所示:
if ((getSomething() != null && getSomethingElse() != null)
|| (getSomething() == null && getSomethingElse() == null))
{
...
}
PMD 告诉我:
有时,可以通过用布尔短路运算符分隔它们的条件来合并两个“if”语句。
为简单起见,我们只使用 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 条件?