我使用PMD来检查我的代码。在大多数情况下,它给了我很多有用的提示,但我无法弄清楚在以下情况下可以改进哪些方面。Java可折叠if语句
原始代码看起来是这样的:
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))
然而,PM D不断抱怨(实际上关于所有三个版本)。这是一个假阳性还是有更好的方式来编写if条件?
你确定你的代码中没有另外的_if_语句吗? PMD抱怨_two_如果陈述,而不是一个比必要更复杂 – michael667
我想不出更好的最终版本(这是我的代码)。 * if里面有什么* if - 块里面有另外一个if吗? – Bohemian
我刚刚在JSR305规范中发现了@ javax.annotations.Nonnull和@ javax.annotations.Nullable注解。我使用的是'com.google.code.findbugs:1.3.9'中的Google实现。它大大清理了我的代码,Intellij IDEA auto根据这些注释生成代码和警告。 –