Findbugs报告了一个不兼容的位掩码错误,但我不知道怎么回事
||
我有一个比较器,在比较它们的内容之前,先检查两个对象的“ null”。
compare方法如下所示:
public int compare(MyClass left, MyClass right) {
if (left == null) {
return right == null ? 0 : 1;
}
if (right == null) {
return -1;
}
// do some other comparing
}
当我通过声纳代码质量检查工具运行此程序时,它在if语句中报告“不兼容的位掩码”错误。 (它读为:\“正确性-不兼容的位掩码:(e | 0x1 = 0x0)中的不兼容的位掩码在.... Compare中产生常量结果。(比较MyClass,MyClass)我看不到这种情况。可以有人对此有所启示吗?
顺便说一句,我使用的声纳版本是2.6。
没有找到相关结果
已邀请:
2 个回复
吐兄
这就是FindBugs抱怨的。
犁攀富
该代码甚至不应该编译,因为在方法签名中您已同意该方法将返回int类型,但是只有在有可能在某些情况下甚至可能不返回值的语句时,该方法才可以返回。 现在出现您的“不兼容的位掩码”问题,这是因为对于(正确== null),该方法似乎返回两个值,即0和1,尽管它们不是同时出现。在您的工具声纳代码质量检查中,似乎该方法为同一比较返回了两个不同的值,因此一个值有时可能会隐藏另一个值。