Java中有效的@SuppressWarnings警告名称列表是什么?

Java中有效的@SuppressWarnings警告名称列表是什么?

位于@SuppressWarnings("")中的("")之间的位。

185041 次浏览

这取决于您的IDE或编译器。

下面是Eclipse Galileo的列表:

  • 所有抑制所有警告
  • 拳击抑制相对于装箱/拆箱操作的警告
  • 来抑制相对于强制转换操作的警告
  • dep-ann抑制相对于已弃用注释的警告
  • 弃用来抑制相对于弃用的警告
  • fallthrough抑制相对于开关中缺失中断的警告 李语句< / >
  • 最后抑制相对于finally阻止的警告 李返回< / >
  • 隐藏抑制相对于隐藏变量的局部变量的警告
  • incomplete-switch抑制相对于缺失条目的警告 在switch语句中(enum case)
  • nls抑制相对于非nls字符串字面量的警告
  • 抑制相对于空分析的警告
  • 限制抑制相对于劝阻或使用的警告 李禁止引用< / >
  • 串行抑制相对于缺少serialVersionUID的警告 字段,用于可序列化类
  • 静态访问抑制相对于不正确静态的警告 李访问< / >
  • synthetic-access抑制相对于未优化的警告 从内部类
  • 访问
  • 无节制的抑制相对于未检查操作的警告
  • unqualified-field-access抑制相对于字段的警告 使用不合格的李< / >
  • 未使用的抑制相对于未使用代码的警告

列表 for Indigo添加:

  • javadoc抑制相对于javadoc警告的警告
  • rawtypes来抑制与原始类型使用相关的警告
  • 静态方法来抑制相对于可以声明为静态的方法的警告
  • 超级来抑制相对于覆盖没有超调用的方法的警告

列表为朱诺补充:

  • 资源抑制与使用Closeable类型资源相关的警告
  • sync-override在覆盖同步方法时,由于缺少同步而抑制警告

Kepler和Luna使用与Juno (列表)相同的令牌列表。

其他的将是相似的,但有所不同。

允许所有值(未识别的值将被忽略)。已识别的列表是特定于编译器的。

Java教程中,uncheckeddeprecation被列为Java语言规范要求的两个警告,因此,它们对所有编译器都有效:

每个编译器警告都属于一个类别。Java语言规范列出了两个类别:弃用和未检查。

Java语言规范中定义它们的特定部分在不同版本之间不一致。在Java SE 8规范中,uncheckeddeprecation分别在9.6.4.5. @SuppressWarnings9.6.4.6 @Deprecated章节中被列为编译器警告。

对于Sun的编译器,运行javac -X会给出该版本所识别的所有值的列表。对于1.5.0_17,列表如下:

  • 所有
  • 弃用
  • 无节制的
  • fallthrough
  • 路径
  • 串行
  • 最后

该列表是特定于编译器的。但是下面是Eclipse中支持的值:

  • allDeprecation弃用,甚至在弃用代码中
  • allJavadoc无效或缺少javadoc
  • assertIdentifier assert的出现作为标识符
  • 拳击自动装箱转换
  • charConcat当字符数组用于字符串拼接而未显式转换为字符串时
  • conditionAssign可能的意外布尔赋值
  • constructorName方法 构造函数名称
  • dep-ann缺失@弃用 李注释< / >
  • 弃用使用已弃用类型或已弃用代码之外的成员
  • 气馁使用匹配不鼓励的访问规则的类型
  • emptyBlock未记录的空块
  • enumSwitchincomplete-switch incomplete enum开关
  • fallthrough可能失败的情况
  • fieldHiding字段隐藏另一个变量
  • 带有最终绑定的finalBound类型参数
  • 最后最终阻塞不正常完成
  • 被禁止的使用匹配禁止访问规则的类型
  • 隐藏宏用于fieldHiding, localHiding, typeHiding和maskedCatchBlock
  • indirectStatic间接引用静态成员
  • intfAnnotation注释类型用作超级接口
  • intfNonInherited接口非继承方法兼容性
  • javadoc无效javadoc
  • localHiding局部变量隐藏另一个变量
  • maskedCatchBlocks隐藏捕获块
  • nls非nls字符串字面量(缺少标签//$ non-nls -)
  • noEffectAssign赋值无效
  • 潜在缺失或冗余空检查
  • nullDereference缺失空检查
  • over-ann缺少@Override注释
  • paramAssign赋值给参数
  • pkgDefaultMethod尝试覆盖package-default方法
  • 使用原始类型(而不是参数化类型)
  • 分号不必要的分号或空语句
  • 串行 missing serialVersionUID
  • specialParamHiding构造函数或setter参数隐藏另一个字段
  • 静态访问宏用于indirectStatic和staticReceiver
  • staticReceiver如果非静态接收器用于获取静态字段或调用静态方法
  • 超级重写方法而不进行超调用
  • 抑制 enable @SuppressWarnings
  • syntheticAccess, synthetic-access当对内部类执行综合访问时
  • 任务在源代码中启用任务标记支持
  • typeHiding类型参数隐藏另一个类型
  • 无节制的未检查类型操作
  • unnecessaryElse不必要的else子句
  • <李> unqualified-field-access, unqualifiedField不合格 引用字段
  • 未使用的宏用于unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedPrivate和unusedThrown
  • unusedArgument未使用的方法参数
  • unusedImport未使用的导入引用
  • unusedLabel未使用的标签
  • unusedLocal未使用的局部变量
  • unusedPrivate未使用的私有成员声明
  • unusedThrown未使用声明抛出异常
  • uselessTypeCheck不必要的cast/instanceof操作
  • varargsCast变量参数需要显式强制转换
  • @SuppressWarnings中的warningToken未处理警告令牌

Sun JDK(1.6)支持的警告列表更短:

  • 弃用检查折旧物品的使用。
  • 无节制的给出Java语言规范要求的未检查转换警告的更多细节。
  • 串行警告可序列化类上缺少serialVersionUID定义。
  • 最后警告finally子句不能正常完成。
  • fallthrough检查开关块的失败情况,并为任何发现的情况提供警告信息。
  • 路径在环境路径中检查一个不存在的路径(例如classpath)。

最新的mac版javac(1.6.0_13)支持以下警告

  • 所有
  • 弃用
  • divzero
  • 无节制的
  • fallthrough
  • 路径
  • 串行
  • 最后
  • 覆盖

这似乎是一个更完整的列表,在那里我发现了一些特定于Android-Studio的警告,我在其他地方找不到(例如SynchronizeOnNonFinalField)

https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html

哦,现在SO的指导方针与SO的限制相反。 一方面,我应该复制列表,而不是只提供链接。 但另一方面,这将超过允许的最大字符数。

.

.

JSL 1.7

Oracle文档提到:

  • unchecked:未检查的警告由字符串" Unchecked "标识。
  • deprecation:当一个类型、方法、字段或构造函数的声明被标注为@Deprecated时(即被重写、调用或通过名称引用),Java编译器必须产生deprecated警告,除非:[…]在实体中使用@SuppressWarnings("deprecation")注释来抑制警告;或

然后解释了实现可以添加并记录它们自己的:

编译器供应商应该将他们支持的警告名称与这种注释类型结合起来记录。鼓励供应商合作,以确保相同的名称在多个编译器中工作。

我只想添加一个IntelliJ抑制参数的主列表:https://gist.github.com/vegaasen/157fbc6dce8545b7f12c

它看起来相当全面。部分:

Warning Description - Warning Name


"Magic character" MagicCharacter
"Magic number" MagicNumber
'Comparator.compare()' method does not use parameter ComparatorMethodParameterNotUsed
'Connection.prepare*()' call with non-constant string JDBCPrepareStatementWithNonConstantString
'Iterator.hasNext()' which calls 'next()' IteratorHasNextCallsIteratorNext
'Iterator.next()' which can't throw 'NoSuchElementException' IteratorNextCanNotThrowNoSuchElementException
'Statement.execute()' call with non-constant string JDBCExecuteWithNonConstantString
'String.equals("")' StringEqualsEmptyString
'StringBuffer' may be 'StringBuilder' (JDK 5.0 only) StringBufferMayBeStringBuilder
'StringBuffer.toString()' in concatenation StringBufferToStringInConcatenation
'assert' statement AssertStatement
'assertEquals()' between objects of inconvertible types AssertEqualsBetweenInconvertibleTypes
'await()' not in loop AwaitNotInLoop
'await()' without corresponding 'signal()' AwaitWithoutCorrespondingSignal
'break' statement BreakStatement
'break' statement with label BreakStatementWithLabel
'catch' generic class CatchGenericClass
'clone()' does not call 'super.clone()' CloneDoesntCallSuperClone

我最喜欢的是IntelliJ中的@SuppressWarnings("WeakerAccess"),当它认为你应该有一个比你正在使用的更弱的访问修饰符时,它不会抱怨。为了支持测试,我们必须对某些方法进行公共访问,而@VisibleForTesting注释并不能阻止警告。

< p >埃塔: “匿名者”在@MattCampbell链接的页面上评论了以下非常有用的注释:

你不应该为了你的目的而使用这个列表 描述。IntelliJ将为您添加这些SuppressWarnings 如果你要求它自动。它已经有能力这么做了

只要去到你有警告的位置,并键入Alt-Enter (或在检查列表中选择它,如果您在那里看到它)。 当菜单出现时,显示警告并提供修复 例如,如果警告是“方法可能是静态的”,那么“使静态” 是IntellJ的提议来为你修复它),而不是选择“进入”, 只需使用右箭头按钮访问子菜单,其中将有 如“编辑检查配置文件设置”等选项。在 这个列表的底部将是像“压制所有检查。 “Suppress for类”,“Suppress for方法”,偶尔 “压制声明”。你可能想要其中任何一个 出现在名单的最后。选择其中之一将添加一个 @SuppressWarnings注释(在某些情况下是注释)到代码中 压制有问题的警告。你不需要猜是哪个 注释,因为IntelliJ将根据警告进行选择 您选择。< / p >

我注意到//noinspection可以在IntelliJ中自动生成

  • 确保你在语句之前没有计划@SuppressWarninigs
  • 现在你可以自动生成特定的//noinspection,当你选择警告时,点击Alt + Enter,然后使用右箭头键查看压抑…选项

当我想要压制来自IntelliJ的“switch有太少case标签”警告时,就结束在这里。我没有找到IntelliJ的@SuppressWarning支持的完整列表,但//noinspection为我做了一件事。

如果你正在使用SonarLint, 尝试上面的方法或类的整个鱿鱼串: @SuppressWarnings(“乌贼:S1172”)< / p >