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

问题描述 投票:242回答:9

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

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

java eclipse warnings compiler-warnings suppress-warnings
9个回答
236
投票

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

这是Eclipse Galileo的list

  • 所有要压制所有警告
  • 拳击以禁止相对于装箱/拆箱操作的警告
  • 强制转换以抑制与强制转换操作相关的警告
  • dep-ann禁止相对于已弃用的注释的警告
  • 弃用以抑制相对于弃用的警告
  • 通过实现来抑制相对于switch语句中缺少中断的警告
  • 最后压制相对于最终阻止不返回的警告
  • 隐藏以抑制相对于隐藏变量的本地人的警告
  • 不完全切换以禁止相对于switch语句中缺少条目的警告(枚举案例)
  • nls禁止相对于非nls字符串文字的警告
  • null以禁止相对于null分析的警告
  • 禁止相对于使用不鼓励或禁止引用的警告
  • 用于禁止相对于可序列化类缺少serialVersionUID字段的警告的serial
  • static-access以禁止相对于不正确的静态访问的警告
  • 合成访问以抑制与内部类的未优化访问相关的警告
  • 取消选中以禁止相对于未经检查的操作的警告
  • unqualified-field-access禁止相对于字段访问的警告不合格
  • 用于禁止相对于未使用代码的警告

针对Indigo的List补充道:

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

qoxswpoi为Juno补充道:

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

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

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


47
投票

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

list中,The Java Tutorialsunchecked被列为Java语言规范要求的两个警告,因此,它们应该适用于所有编译器:

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

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

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

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

41
投票

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

  • 即使在已弃用的代码中,也会弃用allDeprecation
  • allJavadoc无效或缺少javadoc
  • assertIdentifier发生的断言用作标识符
  • 拳击自动转换
  • charConcat在字符串连接中使用char数组而不显式转换为字符串
  • conditionAssign可能意外的布尔赋值
  • 带构造函数名称的constructorName方法
  • dep-ann缺少@Deprecated注释
  • 弃用类型的弃用用法或弃用代码外的成员
  • 不鼓励使用与不鼓励的访问规则匹配的类型
  • emptyBlock未记录的空块
  • enumSwitch,不完全切换不完整的枚举开关
  • 可能落空案件
  • fieldHiding字段隐藏另一个变量
  • finalBound类型参数与最终绑定
  • 最后终于阻止不正常完成
  • 禁止使用与禁止访问规则匹配的类型
  • 为fieldHiding,localHiding,typeHiding和maskedCatchBlock隐藏宏
  • indirectStatic间接引用静态成员
  • intfAnnotation注释类型用作超级接口
  • intfNonInherited接口非继承方法兼容性
  • javadoc javadoc无效
  • localHiding隐藏另一个变量的局部变量
  • maskedCatchBlocks隐藏的catch块
  • nls非nls字符串文字(缺少标签// $ NON-NLS-)
  • noEffectAssign赋值没有任何效果
  • null潜在缺失或冗余空检查
  • nullDereference缺少null检查
  • 过度缺失@Override注释
  • paramAssign赋值给参数
  • pkgDefaultMethod尝试覆盖package-default方法
  • 原始用法a原始类型(而不是参数化类型)
  • 分号不必要的分号或空语句
  • 序列缺少serialVersionUID
  • specialParamHiding构造函数或setter参数隐藏另一个字段
  • indirectStatic和staticReceiver的静态访问宏
  • staticReceiver如果使用非静态接收器获取静态字段或调用静态方法
  • 超级重写方法而不进行超级调用
  • 抑制启用@SuppressWarnings
  • 合成访问,对内部类执行合成访问时的合成访问
  • 任务支持源代码中的任务标记
  • typeHiding类型参数隐藏另一种类型
  • 未经检查的未经检查的类型操作
  • unwantedElse不必要的else子句
  • unqualified-field-access,unqualifiedField对字段的非限定引用
  • 未使用的宏用于unusedArgument,unusedImport,unusedLabel,unusedLocal,unusedPrivate和unusedThrown
  • unusedArgument未使用的方法参数
  • unusedImport未使用的导入引用
  • unusedLabel未使用的标签
  • unusedLocal未使用的局部变量
  • unusedPrivate未使用的私有成员声明
  • unusedThrown未使用的声明抛出异常
  • uselessTypeCheck不必要的cast / instanceof操作
  • varargs Cast varargs参数需要显式演员
  • warningToken @SuppressWarnings中未处理的警告标记

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

  • 弃用检查折旧项目的使用。
  • unchecked提供Java语言规范强制要求的未经检查的转换警告的更多详细信息。
  • serial关于序列化类上缺少serialVersionUID定义的警告。
  • 最后警告关于无法正常完成的最终条款。
  • fallthrough检查掉落情况下的开关块,并为找到的任何内容提供警告消息。
  • path检查环境路径中不存在的路径(例如classpath)。

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

  • 所有
  • 弃用
  • divzero
  • 未选中
  • 下通
  • 路径
  • 串行
  • 最后
  • 覆盖

5
投票

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

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

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

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


1
投票

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

@VisibleForTesting

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


1
投票

JSL 1.7

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

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

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

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


1
投票

我只想补充一点,IntelliJ抑制参数的主列表位于:deprecation

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

https://gist.github.com/vegaasen/157fbc6dce8545b7f12c

0
投票

我注意到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中自动生成

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

当我想要抑制来自IntelliJ的“开关具有太少的案例标签”警告时,结束了这里。我没有找到IntelliJ的//noinspection支持的完整列表,但@SuppressWarning为我做了诀窍。


0
投票

如果你正在使用SonarLint,请在方法或类上面尝试整个鱿鱼串:@SuppressWarnings(“squid:S1172”)

© www.soinside.com 2019 - 2024. All rights reserved.