eclipse - Java中有效的@SuppressWarnings警告名称列表是什么?
Java中有效的("")警告名称列表是什么?
在@SuppressWarnings("")中的("")之间的位。
7个解决方案
226 votes
这取决于您的IDE或编译器。
以下是Eclipse Galileo的列表:
所有要压制所有警告
拳击以禁止相对于装箱/拆箱操作的警告
强制转换以抑制与强制转换操作相关的警告
dep-ann禁止相对于已弃用的注释的警告
弃用以抑制相对于弃用的警告
通过限制来抑制相对于switch中缺少中断的警告 声明
最后压制相对于最终阻止的警告 返回
隐藏以抑制相对于隐藏变量的本地人的警告
不完全切换以禁止相对于缺少条目的警告 在switch语句中(枚举案例)
nls禁止相对于非nls字符串文字的警告
null以禁止相对于null分析的警告
禁止相对于劝阻或使用劝阻的警告 禁止参考
serial以禁止相对于缺少serialVersionUID的警告 可序列化类的字段
静态访问以抑制相对于不正确静态的警告 访问
合成访问以抑制相对于未优化的警告 从内部类访问
取消选中以禁止相对于未经检查的操作的警告
unqualified-field-access抑制相对于字段的警告 访问不合格
用于禁止相对于未使用代码的警告
Indigo列表添加:
javadoc禁止相对于javadoc警告的警告
rawtypes用于抑制与原始类型的使用相关的警告
static-method来抑制相对于可以声明为static的方法的警告
super来禁止相对于覆盖没有超级调用的方法的警告
Juno列表添加:
用于抑制与使用类型为Closeable的资源相关的警告的资源
sync-override用于在覆盖同步方法时因为缺少同步而禁止显示警告
Kepler和Luna使用与Juno(列表)相同的令牌列表。
其他人会相似但有所不同。
cletus answered 2019-02-22T02:31:15Z
47 votes
允许所有值(忽略未识别的值)。 已识别的列表是特定于编译器的。
在Java教程javac -X和deprecation中列出了Java语言规范所要求的两个警告,因此,它们应该对所有编译器有效:
每个编译器警告都属于一个类别。 Java语言规范列出了两个类别:弃用和未选中。
定义它们的Java语言规范中的特定部分在不同版本中不一致。 Java SE 8规范javac -X和deprecation在9.6.4.5节中列为编译器警告。 @SuppressWarnings和9.6.4.6 @Deprecated分别。
对于Sun的编译器,运行javac -X会列出该版本识别的所有值。 对于1.5.0_17,列表似乎是:
所有
弃用
未选中
下通
路径
串行
最后
Martin McNulty answered 2019-02-22T02:32:51Z
36 votes
该列表是特定于编译器的。 但这里是Eclipse支持的值:
即使在已弃用的代码中,也会弃用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缺少空检查
过度缺失@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)有一个较短的支持警告列表:
弃用检查折旧项目的使用。
unchecked提供Java语言规范强制要求的未经检查的转换警告的更多详细信息。
serial关于序列化类上缺少serialVersionUID定义的警告。
最后警告关于无法正常完成的最终条款。
fallthrough检查掉落情况下的开关块,并为找到的任何内容提供警告消息。
path检查环境路径中不存在的路径(例如classpath)。
mac的最新可用javac(1.6.0_13)具有以下支持的警告
所有
投
弃用
divzero
空
未选中
下通
路径
串行
最后
覆盖
D. Wroblewski answered 2019-02-22T02:43:08Z
4 votes
我最喜欢的是IntelliJ中的@SuppressWarnings("WeakerAccess"),当它认为你应该拥有比你使用的更弱的访问修饰符时,它不会抱怨它。 我们必须拥有一些支持测试的方法的公共访问权限,并且@VisibleForTesting注释不会阻止警告。
barclay answered 2019-02-22T02:43:40Z
1 votes
这似乎是一个更完整的列表,在那里我发现了一些我在其他地方找不到的特定于Android-Studio的警告(例如SynchronizeOnNonFinalField)
[https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html]
哦,现在SO的指导方针与SO的限制相矛盾。一方面,我应该复制列表而不是仅提供链接。但另一方面,这将超过允许的最大字符数。 所以,我们希望链接不会破坏。
matteo answered 2019-02-22T02:44:21Z
1 votes
JSL 1.7
Oracle文档提到:
deprecation:未选中的警告由字符串“unchecked”标识。
deprecation:当使用注释@Deprecated注释声明的类型,方法,字段或构造函数(即通过名称覆盖,调用或引用)时,Java编译器必须生成弃用警告,除非:[...] 该用法位于注释为使用注释@SuppressWarnings(“deprecation”)抑制警告的实体内; 要么
然后它解释了实现可以添加和记录自己的:
编译器供应商应记录它们支持的警告名称以及此注释类型。 鼓励供应商合作以确保相同的名称在多个编译器中工作。
1 votes
我只想补充一点,有一个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
Matt Campbell answered 2019-02-22T02:45:57Z