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

时间:2009-07-30 11:25:34

标签: java eclipse warnings compiler-warnings suppress-warnings

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

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

9 个答案:

答案 0 :(得分:232)

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

以下是Eclipse Galileo的list

  
      
  • 所有以取消所有警告
  •   
  • 装箱以取消与装箱/拆箱操作相关的警告
  •   
  • 施放以取消与投射操作相关的警告
  •   
  • dep-ann 以取消与已弃用的注释相关的警告
  •   
  • 弃用以取消与弃用相关的警告
  •   
  • fallthrough 以禁止相对于switch中丢失的中断的警告   语句
  •   
  • 终于来抑制相对于finally块的警告   返回
  •   
  • 隐藏以取消相对于隐藏变量
  • 的本地人的警告   
  • 不完整切换以取消相对于缺少条目的警告   在switch语句中(枚举案例)
  •   
  • nls 以取消相对于非nls字符串文字的警告
  •   
  • null 以禁止相对于空分析的警告
  •   
  • 限制以取消与劝阻或使用相关的警告   禁止参考
  •   
  • 序列以取消相对于缺少serialVersionUID的警告   可序列化类的字段
  •   
  • 静态访问以禁止相对于错误静态的警告   访问
  •   
  • synthetic-access 以禁止相对于未优化的警告   从内部类访问
  •   
  • 取消选中以取消与未经检查的操作相关的警告
  •   
  • unqualified-field-access 以取消相对于字段的警告   访问不合格
  •   
  • 未使用以取消与未使用代码相关的警告
  •   
Indigo的

List补充道:

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

List补充道:

  
      
  • 资源,以取消与使用类型为Closeable
  • 的资源相关的警告   
  • sync-override ,以便在覆盖同步方法时因为缺少同步而禁止显示警告
  •   

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

其他人会相似,但会有所不同。

答案 1 :(得分:47)

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

The Java Tutorials uncheckeddeprecation中列出了Java语言规范要求的两个警告,因此它们应该适用于所有编译器:

  

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

The Java Language Specification中定义它们的特定部分在不同版本中不一致。在Java SE 8规范中uncheckeddeprecation 9.6.4.5中列为编译器警告。 @SuppressWarnings 9.6.4.6 @Deprecated

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

  • 所有
  • 弃用
  • 选中
  • 下通
  • 路径
  • 串行
  • 最后

答案 2 :(得分:41)

答案 3 :(得分:5)

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

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

  

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

     

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

JSL 1.7

The Oracle documentation提及:

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

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

  

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

答案 6 :(得分: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

答案 7 :(得分:0)

我注意到//noinspection可以在 IntelliJ

中自动生成
  • 确保您在声明之前还没有计划@SuppressWarninigs
  • 现在,您可以通过选择警告后按 Alt + Enter 来自动生成特定的//noinspection,然后使用向右箭头键查看禁止... 选项

在这里我想取消IntelliJ发出的“开关的案例标签太少”警告。我没有找到完整的IntelliJ @SuppressWarning支持列表,但是//noinspection为我成功了。

答案 8 :(得分:0)

If you're using SonarLint, try above the method or class the whole squid string: @SuppressWarnings("squid:S1172")