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

之间的位 ("")@SuppressWarnings("").

有帮助吗?

解决方案

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

这里有一个 列表 对于 Eclipse 伽利略:

  • 全部 抑制所有警告
  • 拳击 抑制与装箱/拆箱操作相关的警告
  • 投掷 抑制与强制转换操作相关的警告
  • 德普安 抑制与已弃用注释相关的警告
  • 弃用 抑制与弃用相关的警告
  • 失败 相对于交换机语句中缺少断裂的警告
  • 最后 压制相对于最终阻止的警告,该警告不会返回
  • 隐藏 抑制与隐藏变量的局部变量相关的警告
  • 不完全切换 以抑制针对缺失条目的警告 在 switch 语句中(枚举情况)
  • 国家统计局 抑制与非 nls 字符串文字相关的警告
  • 无效的 抑制与空分析相关的警告
  • 限制 抑制有关使用灰心或禁止参考的警告
  • 连续剧 以抑制因缺少 serialVersionUID 而发出的警告 可序列化类的字段
  • 静态访问 抑制相对于不正确静态访问的警告
  • 合成访问 抑制相对于从内部类的不优化访问的警告
  • 未经检查的 抑制与未经检查的操作相关的警告
  • 不合格的现场访问 抑制相对于现场访问的警告
  • 没用过 抑制与未使用的代码相关的警告

列表 对于 Indigo 来说,添加了:

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

列表 朱诺补充道:

  • 资源 抑制与 Closeable 类型资源的使用相关的警告
  • 同步覆盖 抑制由于重写同步方法时缺少同步而出现的警告

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

其他的会类似但有所不同。

其他提示

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

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

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

里面的具体部分 Java 语言规范 它们的定义位置在不同版本中并不一致。在 Java SE 8 规范中 uncheckeddeprecation 在各部分中列为编译器警告 9.6.4.5。@SuppressWarnings9.6.4.6 @已弃用, , 分别。

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

  • 全部
  • 弃用
  • 未经检查的
  • 失败
  • 小路
  • 连续剧
  • 最后

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

  • 全部弃用 即使在已弃用的代码中也已弃用
  • 所有Javadoc javadoc 无效或丢失
  • 断言标识符 出现用作标识符的断言
  • 拳击 自动装箱转换
  • 字符连接 当在字符串连接中使用 char 数组而不显式转换为字符串时
  • 条件分配 可能的意外布尔赋值
  • 构造函数名称 方法 构造函数名
  • 德普安 缺少 @Deprecated 标注
  • 弃用 在已弃用的代码之外使用已弃用的类型或成员
  • 灰心 使用与不鼓励的访问规则相匹配的类型
  • 空块 无证空块
  • 枚举开关, 不完全切换 不完整的枚举开关
  • 失败 可能失败的情况
  • 字段隐藏 隐藏另一个变量的字段
  • 最终绑定 具有最终边界的类型参数
  • 最后 finally 块未正常完成
  • 禁止的 使用与禁止访问规则匹配的类型
  • 隐藏 fieldHiding、localHiding、typeHiding 和 maskedCatchBlock 的宏
  • 间接静态 间接引用静态成员
  • intf注释 用作超级接口的注释类型
  • intf非继承 接口非继承方法兼容性
  • javadoc 无效的 javadoc
  • 本地隐藏 局部变量隐藏另一个变量
  • maskedCatchBlocks 隐藏的 catch 块
  • 国家统计局 非 nls 字符串文字(缺少标签 //$NON-NLS-)
  • 无效果分配 赋值没有效果
  • 无效的 潜在的缺失或冗余空检查
  • 空取消引用 缺少空检查
  • 奥弗安 缺少@Override注释
  • 参数分配 给参数赋值
  • pkg默认方法 尝试覆盖包默认方法
  • 生的 原始类型的用法(而不是参数化类型)
  • 分号 不必要的分号或空语句
  • 连续剧 缺少serialVersionUID
  • 特殊参数隐藏 隐藏另一个字段的构造函数或设置器参数
  • 静态访问 间接静态和静态接收器的宏
  • 静态接收器 如果使用非静态接收器来获取静态字段或调用静态方法
  • 极好的 重写方法而不进行超级调用
  • 压制 启用@SuppressWarnings
  • 合成访问,合成访问 对内部类执行综合访问时
  • 任务 在源代码中启用对任务标签的支持
  • 类型隐藏 隐藏另一种类型的类型参数
  • 未经检查的 未经检查的类型操作
  • 不必要的其他 不必要的 else 子句
  • 不合格字段访问,不合格字段 无保留 外地参照
  • 没用过 未使用的参数、未使用的导入、未使用的标签、未使用的本地、未使用的私有和未使用的抛出的宏
  • 未使用的参数 未使用的方法参数
  • 未使用的导入 未使用的导入参考
  • 未使用标签 未使用的标签
  • 未使用本地 未使用的局部变量
  • 未使用私人 未使用的私有成员声明
  • 未使用扔掉 未使用的已声明抛出异常
  • 无用的类型检查 不必要的强制转换/实例操作
  • 可变参数转换 varargs 参数需要显式强制转换
  • 警告令牌 @SuppressWarnings 中未处理的警告标记

Sun JDK (1.6) 的长度较短 列表 支持的警告数量:

  • 弃用 检查折旧物品的使用情况。
  • 未经检查的 提供有关 Java 语言规范强制要求的未经检查的转换警告的更多详细信息。
  • 连续剧 警告可序列化类上缺少serialVersionUID 定义。
  • 最后 警告无法正常完成的finally 子句。
  • 失败 检查开关块是否有掉落情况,并为发现的任何情况提供警告消息。
  • 小路 检查环境路径(例如类路径)中是否存在不存在的路径。

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

  • 全部
  • 投掷
  • 弃用
  • 迪弗泽罗
  • 空的
  • 未经检查的
  • 失败
  • 小路
  • 连续剧
  • 最后
  • 覆盖

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

ETA: "匿名"评论,在@MattCampbell链接的页面上,以下令人难以置信的有用说明:

  

您不应该为此目的使用此列表   描述。 IntelliJ将为您添加这些SuppressWarnings   如果你问的话会自动。它已经能够做到这一点   正如我记得的那样多次发布。

     

只需转到出现警告的位置,然后输入Alt-Enter   (或者如果您在那里看到它,请在“检查”列表中选择它)。   当菜单出现时,显示警告并提供修复它   你(例如,如果警告是“方法可能是静态的”,那么“make static”)   是IntellJ为你修复它的提议,而不是选择“输入”,   只需使用右箭头按钮即可访问子菜单   “编辑检查配置文件设置”等选项等等。在   此列表的底部将是“禁止所有检查”等选项   class",“Suppress for class”,“Suppress for method”,偶尔   “抑制声明”。你可能想要其中任何一个   出现在列表的最后。选择其中一个将添加一个   @SuppressWarnings注释(或在某些情况下注释)到您的代码   压制有问题的警告。你不需要猜测它   要添加的注释,因为IntelliJ将根据警告选择   你选择了。

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

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

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

杰士林1.7

Oracle 文档 提到:

  • unchecked: :未检查的警告由字符串“unchecked”标识。
  • deprecation: :当使用声明带有 @Deprecated 注释的类型、方法、字段或构造函数时(即,Java 编译器必须生成弃用警告)通过名称覆盖、调用或引用),除非:[...] 在实体中使用,该实体被注释为通过注释 @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

我注意到 //noinspection 可以自动生成 智能

  • 确保您还没有计划 @SuppressWarninigs 在声明之前
  • 现在您可以自动生成特定的 //noinspection 通过击打 Alt+Enter 当您选择警告然后使用 右箭头键 看到 抑制... 选项

当我想抑制来自 IntelliJ 的“开关案例标签太少”警告时,就到了这里。我没有找到 IntelliJ 的完整列表 @SuppressWarning 支持但是 //noinspection 为我成功了。

如果您使用的是SonarLint, 尝试上面的方法或类整个鱿鱼串:     @SuppressWarnings(QUOT;鱿鱼:S1172&QUOT)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top