我最近发现FindBugs的@edu.umd.cs.findbugs.annotations.SuppressWarnings
注释非常酷,并且允许您基本上告诉FindBugs忽略某些警告。
我已经成功实施了我自己的SLF4J绑定,他们建议采用slf4j-simple
并使用您自己的记录器和记录器工厂绑定对其进行修改,我很高兴地说它就像魅力一样。
我刚刚在包含此SLF4J绑定的包上运行发现错误,它抱怨原始StaticLoggerBinder
作者(Ceki Gulku)编写的某行代码:
// to avoid constant folding by the compiler, this field must *not* be final.
publicstatic String REQUESTED_API_VERSION = "1.6"; // !final
FindBugs抱怨此字段“不是最终字段,但应该是”。然而,SLF4J上的(非常)聪明人已经想到了这一点,并放置了上面提供的周围评论。
所以,为了让FindBugs闭嘴,我按照惯常的方式修改了FB警告的代码:
@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
public static String REQUESTED_API_VERSION = "1.6";
当我清理项目并重新运行FindBugs时,我在同一行代码上收到第二个警告,这次抱怨:
永远不会读取此字段。该字段是公共的或受保护的,因此它可能用于未被视为分析一部分的类。如果没有,请考虑将其从课程中删除。
当我添加第二次警告抑制时:
@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
@edu.umd.cs.findbugs.annotations.SuppressWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public static String REQUESTED_API_VERSION = "1.6";
我从Eclipse中得到编译器/语法错误:
重复注释@SuppressWarnings。
如何在同一行代码中抑制多个FindBugs警告?
答案 0 :(得分:20)
只需在一个注释中列出数组中的所有警告标识符:
@edu.umd.cs.findbugs.annotations.SuppressWarnings({
"MS_SHOULD_BE_FINAL",
"URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
public static String REQUESTED_API_VERSION = "1.6";
与标准java.lang.SuppressWarnings
一样,FindBugs版本也has a parameter of type String[]
。对于单个值,可以省略花括号,以使生活更轻松。
答案 1 :(得分:4)
FindBugs 3+风格:
@SuppressFBWarnings(
value={"NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE","STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"},
justification="let me just make the build pass")
答案 2 :(得分:1)
试试这个:
@edu.umd.cs.findbugs.annotations.SuppressWarnings({"MS_SHOULD_BE_FINAL" , "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
public static String REQUESTED_API_VERSION = "1.6";