18

FindBugs 在我的代码中发现了一个潜在的错误。但这不是错误。

是否可以将此事件标记为“不是错误”并将其从错误列表中删除?

我已经非常清楚地记录了为什么每种情况都不是错误。

例如。一个类实现了类似的接口。它有 compareTo 方法。但是,我没有覆盖 equals 方法。

FindBugs 不喜欢这样,因为 JavaDocs 声明建议

(x.compareTo(y)==0) == (x.equals(y))

尽管在我的情况下,上述条件是并且永远都是正确的。

4

3 回答 3

34

除了使用过滤器,您还可以使用SuppressWarnings注释。您必须使用 findbugs 包中的注释,这意味着您需要导入或使用它的完全限定名称。这是因为除了来自 JDK 的SuppressWarnings之外,它还具有保留“类”,这是必需的,因为 findbugs 对已编译的字节码而不是源代码进行操作。

例子:

@edu.umd.cs.findbugs.annotations.SuppressWarnings(
    value="EQ_COMPARETO_USE_OBJECT_EQUALS", 
    justification="because I know better")

在一种极端情况下,您可能不应该使用注解:如果您的代码是库代码,最终放在一个 jar 中,那么其他项目可以使用它,您仍在使用 Java5。原因是 JDK 中的一个错误,如果注释不在类路径中,则会导致 javac 崩溃。

于 2008-10-30T08:18:58.913 回答
6

可能是通过添加过滤器作为 findbugs 的参数

匹配子句只能匹配错误实例中实际包含的信息

<Match>
   <Class name="com.foobar.MyClass" />
   <Method name="myMethod" />
   <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
于 2008-10-30T08:09:24.627 回答
0

另一方面 - 如果您使用这种自动代码审查工具,根据广为人知的建议突出潜在问题,也许您应该遵守它的建议?想想那些将在你之后维护代码的人。

如果代码在一段时间后发生变化怎么办?

于 2008-10-30T09:04:37.697 回答