您可以使用@SuppressWarnings("unchecked")
eclipse 编译器和 javac 都支持的。
但请记住,@SuppressWarnings
注释由编译器使用,它可以有自己的值。JLS 仅强制编译器理解“未检查”和“已弃用”的值(目前)。
编译器供应商应结合此注释类型记录他们支持的警告名称。鼓励他们合作以确保相同的名称在多个编译器中工作。
如果您使用 Helios,则需要设置一个特定选项以允许@SuppressWarnings("unchecked")
而不是@SuppressWarnings("rawtypes")
,
如果无法使用新令牌更新代码,suppressRawWhenUnchecked=true
可以在启动 Eclipse 时设置系统属性。
资源 :
编辑:这是现在不可用的 knol 文章,用作参考,最初由Alex Miller撰写。
Java中的@SuppressWarnings注解
用于抑制各种警告的标准注释
SuppressWarnings 注解作为标准注解添加到 Java SE 5 中。
定义
@SuppressWarnings注释在 Java 语言规范第9.6.1.5 节中定义。本节规定:
注释类型SuppressWarnings
支持程序员控制 Java 编译器发出的警告。它包含一个元素,该元素是String
. 如果程序声明使用 annotation 进行注释@SuppressWarnings(value = {S1, ... , Sk})
,则 Java 编译器不得报告由 S1、...、Sk 之一标识的任何警告,如果该警告是由于带注释的声明或其任何部分而生成的。
未经检查的警告由字符串“ unchecked
”标识。
后面的部分还@Deprecation
提到可以使用 来抑制这些警告@SuppressWarnings("deprecation")
。
有效的警告类型
规范中提到的仅有的两个警告字符串是“unchecked”和“deprecation”。但是,Sun JDK 在编译器中使用了更大的字符串集。您可以通过执行以下命令来确定当前集:
javac -X
这将显示(除其他外)-Xlint 的有效设置。
例如,Sun JDK 1.5 显示:
- all - 禁止此代码中的所有警告
- deprecation - 禁止使用已弃用代码的警告
- unchecked - 禁止来自未经检查的调用或未经检查的演员的警告
- fallthrough - 如果开关在没有找到有效案例的情况下失败(并且没有默认值),则抑制警告
- 小路 -
- serial - 如果 Serializable 类未定义 serialVersionUID,则禁止显示警告
- finally - 禁止在 finally 中返回警告(这将忽略尝试返回)
Sun JDK 1.6 增加了:
- 投掷
- divzero - 如果检测到整数除以零,则抑制警告
- 空的
- 覆盖
- 没有任何
IDE 和静态分析工具通常支持 @SuppressWarnings 的大量其他可能值。这些值对应于 IDE 执行的特定静态分析检查。
蚀
Eclipse 3.3 的 Eclipse 警告值记录在 JDT 文档中。
- all - 禁止所有警告
- 装箱 - 抑制与装箱/拆箱操作相关的警告
- cast - 抑制与强制转换操作相关的警告
- dep-ann - 抑制与弃用注释相关的警告
- 弃用 - 抑制与弃用相关的警告
- fallthrough - 抑制与 switch 语句中缺少中断相关的警告
- finally - 抑制与 finally 块相关的不返回的警告
- 隐藏 - 抑制与隐藏变量的本地人相关的警告
- 不完整开关 - 抑制与 switch 语句中缺失条目相关的警告(枚举案例)
- nls - 抑制与非 nls 字符串文字相关的警告
- null - 抑制与 null 分析相关的警告
- 限制 - 抑制与使用不鼓励或禁止引用相关的警告
- serial - 抑制与可序列化类的缺失 serialVersionUID 字段相关的警告
- static-access - 抑制与不正确的静态访问相关的警告
- 合成访问 - 抑制与来自内部类的未优化访问相关的警告
- unchecked - 抑制与未经检查的操作相关的警告
- unqualified-field-access - 抑制与不合格字段访问相关的警告
- 未使用 - 抑制与未使用代码相关的警告
智能
NetBeans
例子
指定单个警告的示例:
@SuppressWarnings("unchecked")
public void methodWithScaryWarnings() {
List rawList = new ArrayList();
List<String> stringList = (List<String>)rawList;
}
使用两个警告的示例:
@SuppressWarnings({"unchecked","deprecation"})
public void methodWithScaryWarnings() {
callDeprecatedMethod();
}