我正在下面的代码上运行findbugs它给我下面的错误

不兼容的位掩码
此方法将(e | C)形式的表达式与D.进行比较,由于常量C和D的特定值,该表达式将始终比较不相等。这可能表示逻辑错误或错别字。
通常,发生此错误是因为代码要在位集中执行成员资格测试,但使用按位OR运算符(“ |”)而不是按位AND(“&”)。

  if (!conditionplace.isEmpty())
   {
           for (Place place : conditionplace) {
            parent.writeWithModificationType(
                condId,
                place.getId(),
                place.getDisplay()

            );
        }
    }


我也在测试中使用三叶草

谁能帮我解决这个问题?

最佳答案

您遇到的错误与三叶草的工作方式严格相关。它检测代码的每一行以记录其执行。当它检测分支条件时,它会以逻辑条件保持不变的方式添加其他条件来记录真实的分支执行。因此,在您的情况下,它将执行以下操作

if (
(!conditionplace.isEmpty()) &&    (__CLR4_2_000ito7x4bh.R.iget(9)!=0|true) // if true
||
(__CLR4_2_000ito7x4bh.R.iget(10)==0&false) //else
) {
//code


它使用非电路运算符来确保其代码已执行,并且能够记录条件中所有表达式的执行(其中可能有很多)。

一般而言,Clover添加了许多奇怪的机器生成的代码(您可以检测Java类并查看结果),因此,实际上不建议对检测的源代码运行任何类型的静态代码分析。

07-23 22:20