Java SuppressWarnings不适用于FindBugs
我在我的Eclipse项目上运行了FindBugs,并得到了一个潜在的bug警告,出于特定的原因(在这个问题的上下文之外),我想抑制它。代码如下:Java SuppressWarnings不适用于FindBugs,java,annotations,findbugs,Java,Annotations,Findbugs,我在我的Eclipse项目上运行了FindBugs,并得到了一个潜在的bug警告,出于特定的原因(在这个问题的上下文之外),我想抑制它。代码如下: public class LogItem { private String name; private void setName(final String nm) { name = nm; } } 当您在此类上运行FindBugs时,is会在name=nm赋值操作中向您发出警告,说明:未读字段:com.me
public class LogItem {
private String name;
private void setName(final String nm) {
name = nm;
}
}
当您在此类上运行FindBugs时,is会在name=nm
赋值操作中向您发出警告,说明:未读字段:com.me.myorg.LogItem.name
因此,我尝试添加以下内容:
private void setName(final String nm) {
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "NP", justification = "Because I can")
name = nm;
}
执行此操作时,Eclipse中会出现语法(编译)错误,说明:
重复局部变量nm;无法将名称解析为类型
因此,我尝试在字段本身上添加FindBugs'SuppressWarnings
,但是在类上重新运行FindBugs之后,FindBugs仍然在抱怨同一行代码,原因也是一样的。我甚至尝试将SuppressWarnings
添加到setName
方法中,但仍然没有任何区别
如何(确切地说!)使用此注释使FindBugs安静 我一直在使用内置的
java.lang.SuppressWarnings
,而不是FindBugs,到目前为止,它还可以工作。此外,对于特定语句,您可能需要将语句保持在注释之后的同一行上。像
@SuppressWarnings("NP") name = nm;
另外,您确定这里的“NP”是有效的警告标识符吗?如果没有其他办法,我会尝试
“unused”
。将注释放在字段上并修复错误标识符。这对我很有用:
public class LogItem {
@edu.umd.cs.findbugs.annotations.SuppressWarnings("URF_UNREAD_FIELD")
private String name;
谢谢@Peter,但这些建议都不起作用。当我将FindBugs
SuppressWarnings
替换为您的答案包含的确切代码行时,我仍然得到一个编译器错误:此行有多个标记-重复的局部变量nm-无法解析为类型-标记“=”上的语法错误,请删除此标记-未读字段:com.me.myorg.LogItem.name
。有什么想法吗?“复制局部变量”表明您的代码中有一些东西没有发布在您的问题中…?@LouisWasserman,我从eclipse中得到了与该类相同的错误。当注释与语句一起使用时,解析器似乎猜错了您的意思。nm
只定义了一次;这不应该与注释有任何关系,不是吗?我认为eclipse编译器假定“name”是一种类型,因为这是注释之后所期望的。那么不允许使用“=”,因此它会忽略它。所以它认为您正在声明一个名为“nm”的本地,类型为“name”。如何导入它,我需要为gradle依赖添加什么?