300

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

介于 in 之间的("")@SuppressWarnings("")

4

9 回答 9

281

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

这是Eclipse Galileo的列表:

  • all禁止所有警告
  • 装箱以抑制与装箱/拆箱操作相关的警告
  • 强制转换以抑制与强制转换操作相关的警告
  • dep-ann抑制与不推荐使用的注释相关的警告
  • 弃用以抑制与弃用相关的警告
  • fallthrough以抑制与 switch 语句中缺少中断有关的警告
  • finally抑制相对于 finally 块不返回的警告
  • 隐藏以抑制相对于隐藏变量的本地人的警告
  • 不完整的开关,用于抑制与 switch 语句中缺少的条目相关的警告(枚举案例)
  • nls抑制与非 nls 字符串文字相关的警告
  • null以抑制与 null 分析相关的警告
  • 限制抑制与使用不鼓励或禁止引用相关的警告
  • serial以抑制与可序列化类的缺失 serialVersionUID 字段相关的警告
  • 静态访问以抑制与不正确的静态访问相关的警告
  • 合成访问以抑制与来自内部类的未优化访问相关的警告
  • unchecked以抑制与未经检查的操作相关的警告
  • unqualified-field-access抑制与不合格字段访问相关的警告
  • 未使用以抑制与未使用代码相关的警告

Indigo 的列表添加:

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

朱诺列表添加:

  • 用于抑制与 Closeable 类型资源的使用相关的警告的资源
  • 同步覆盖以抑制警告,因为在覆盖同步方法时缺少同步

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

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

于 2009-07-30T11:27:14.157 回答
49

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

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

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

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

对于 Sun 的编译器,runningjavac -X给出了该版本识别的所有值的列表。对于 1.5.0_17,列表似乎是:

  • 全部
  • 弃用
  • 未经检查
  • 失败
  • 小路
  • 串行
  • 最后
于 2009-07-30T11:29:32.233 回答
47

该列表是特定于编译器的。但这里是Eclipse支持的值:

  • allDeprecation 弃用,即使在已弃用的代码中
  • allJavadoc 无效或缺少 javadoc
  • assertIdentifier 出现的断言用作标识符
  • 拳击 自动装箱转换
  • charConcat 在字符串连接中使用 char 数组而不显式转换为字符串时
  • conditionAssign 可能的意外布尔赋值
  • 带有构造函数名称的 constructorName方法
  • dep-ann 缺少 @Deprecated 注释
  • 弃用 类型或成员在弃用代码之外的弃用用法
  • 不鼓励 使用与不鼓励的访问规则匹配的类型
  • emptyBlock 未记录的空块
  • enumSwitch不完整的开关 不完整的枚举开关
  • fallthrough 可能的失败案例
  • fieldHiding 字段隐藏另一个变量
  • 具有最终边界的 finalBound类型参数
  • finally 块没有正常完成
  • 禁止 使用与禁止访问规则匹配的类型
  • fieldHiding、localHiding、typeHiding 和 maskedCatchBlock 的 隐藏宏
  • 对静态成员的indirectStatic 间接引用
  • intfAnnotation 注释类型用作超接口
  • intfNonInherited 接口非继承方法兼容性
  • javadoc 无效的 javadoc
  • localHiding 局部变量隐藏另一个变量
  • maskedCatchBlocks 隐藏捕获块
  • nls 非 nls 字符串文字(缺少标签 //$NON-NLS-)
  • noEffectAssign 分配无效果
  • null 潜在的缺失或冗余的 null 检查
  • nullDereference 缺少空检查
  • over-ann 缺少@Override 注释
  • paraMAssign 赋值给一个参数
  • pkgDefaultMethod 尝试覆盖包默认方法
  • 原始类型的原始 用法(而不是参数化类型)
  • 分号 不必要的分号或空语句
  • 序列号 缺失 serialVersionUID
  • specialParamHiding 构造函数或设置器参数隐藏另一个字段
  • 间接静态和静态接收器的静态访问
  • staticReceiver 如果使用非静态接收器获取静态字段或调用静态方法
  • 超级 覆盖方法而不进行超级调用
  • 抑制 启用@SuppressWarnings
  • 合成访问,合成访问 时为内部类执行合成访问
  • 任务 启用对源代码中任务标签的支持
  • typeHiding 类型参数隐藏另一种类型
  • 未经 检查的未经检查的类型操作
  • 不必要 的Else 不必要的 else 子句
  • unqualified-field-access, unqualifiedField 对字段的不合格引用
  • 未使用 的宏未使用的参数、未使用的导入、未使用的标签、未使用的本地、未使用的私有和未使用的抛出
  • usedArgument 未使用的方法参数
  • usedImport 未使用的导入参考
  • 使用标签未使用标签
  • usedLocal 未使用的局部变量
  • usedPrivate 未使用的私有成员声明
  • usedThrown 未使用的声明抛出的异常
  • uselessTypeCheck 不必要的 cast/instanceof 操作
  • varargsCast varargs 参数需要显式 转换
  • @SuppressWarnings 中的warningToken 未处理的警告标记

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

  • deprecation 检查折旧项目的使用情况。
  • unchecked 为 Java 语言规范规定的未经检查的转换警告提供更多详细信息。
  • serial警告在可序列化类上缺少 serialVersionUID 定义。
  • finally警告无法正常完成的 finally 子句。
  • fallthrough检查开关块是否有故障情况,并为发现的任何情况提供警告消息。
  • path 检查环境路径中不存在的路径(例如类路径)。

适用于 mac 的最新可用 javac (1.6.0_13) 具有以下受支持的警告

  • 全部
  • 投掷
  • 弃用
  • divzero
  • 空的
  • 未经检查
  • 失败
  • 小路
  • 串行
  • 最后
  • 覆盖
于 2009-07-30T11:38:14.900 回答
9

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

ETA:“匿名”在@MattCampbell 链接到的页面上评论了以下非常有用的注释:

您不需要将此列表用于您所描述的目的。如果您要求,IntelliJ 会自动为您添加这些 SuppressWarnings。在我记得的许多版本中,它已经能够做到这一点。

只需转到出现警告的位置并键入 Alt-Enter(如果您在那里看到它,则在检查列表中选择它)。当菜单出现时,显示警告并提供为您修复它(例如,如果警告是“方法可能是静态的”,那么“制作静态”是 IntellJ 为您修复它的提议),而不是选择“输入”,只需使用右箭头按钮访问子菜单,其中将包含“编辑检查配置文件设置”等选项。此列表的底部将是“禁止所有检查类”、“禁止类”、“禁止方法”和偶尔“禁止声明”之类的选项。您可能想要列表中最后出现的任何一个。选择其中之一将在您的代码中添加一个 @SuppressWarnings 注释(或在某些情况下为注释),以抑制相关警告。您无需猜测要添加哪个注释,因为 IntelliJ 将根据您选择的警告进行选择。

于 2018-03-22T21:33:31.317 回答
6

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

  • 确保您@SuppressWarninigs在声明之前还没有计划
  • //noinspection现在,您可以在选择警告时按Alt+Enter自动生成特定内容,然后使用右箭头键查看Suppress for ...选项

当我想抑制来自 IntelliJ 的“开关的大小写标签太少”警告时,到此结束。我没有找到 IntelliJ@SuppressWarning支持的完整列表,但//noinspection对我有用。

于 2019-01-17T15:02:05.017 回答
2

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

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

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

于 2014-10-11T17:26:31.787 回答
1

JSL 1.7

Oracle 文档提到:

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

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

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

于 2015-03-26T14:16:39.673 回答
1

我只想补充一点,在以下位置有一个 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
于 2017-12-20T16:44:20.770 回答
1

如果您使用的是 SonarLint,请在方法上方尝试整个 squid 字符串或对整个 squid 字符串进行分类:@SuppressWarnings("squid:S1172")

于 2019-04-17T02:41:32.763 回答