跳至主要內容

Java 中 @SuppressWarnings 注解用法详解

原创GuoCay约 919 字JavaJDK

说明

J2SE5.0 提供了一个注解 @SuppressWarnings。该注解的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。
@SuppressWarnings 批注允许您选择性地取消特定代码段(即类或方法)中的警告。
其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。

警告

@SuppressWarnings 就像一粒 止疼片, 本质上并未解决任何问题. 只是在编译期间通过抑制不抛警告而已.

源码

/**
 * 指示应在带注释的元素(以及带注释的元素中包含的所有程序元素)中抑制命名的编译器警告。
 * 请注意,给定元素中抑制的警告集是所有包含元素中抑制的警告的超集。
 * 例如,如果您注释一个类以抑制一个警告并注释一个方法以抑制另一个,则两个警告都将在该方法中被抑制。
 * 但是,请注意,如果在模块信息文件中抑制了警告,则抑制适用于文件中的元素,而不适用于模块中包含的类型。
 * 作为一种风格,程序员应该总是在它有效的最深嵌套元素上使用这个注解。 如果你想在特定方法中抑制警告,你应该注释那个方法而不是它的类。
 */
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    /**
	 * 编译器在带注释的元素中禁止显示的一组警告。 允许重复名称。 名称的第二次和连续出现将被忽略。
	 * 无法识别的警告名称的存在不是错误:编译器必须忽略它们无法识别的任何警告名称。
	 * 但是,如果注释包含无法识别的警告名称,它们可以自由发出警告。
	 * 字符串“unchecked”用于抑制未经检查的警告。
	 * 编译器供应商应记录他们支持的附加警告名称以及此注释类型。
	 * 鼓励他们合作以确保相同的名称在多个编译器中工作。
     */
    String[] value();
}

可选值

关键字用途
all抑制所有警告
boxing抑制与装箱/拆箱操作相关的警告
cast抑制与转换操作相关的警告
dep-ann抑制与弃用注释相关的警告
deprecation抑制与弃用相关的警告
fallthrough抑制与 switch 语句中缺少中断相关的警告
finally抑制相对于 finally 块不返回的警告
hiding抑制与隐藏变量的局部变量相关的警告
incomplete-switch抑制与 switch 语句中缺失条目相关的警告(枚举大小写)
nls抑制与非 nls 字符串文字相关的警告
null抑制与空分析相关的警告
rawtypes在类参数上使用泛型时抑制与非特定类型相关的警告
restriction抑制与使用不鼓励或禁止的引用有关的警告
serial抑制与可序列化类的缺少 serialVersionUID 字段相关的警告
static-access抑制与不正确的静态访问相关的警告
synthetic-access抑制与来自内部类的未优化访问相关的警告
unchecked抑制与未经检查的操作相关的警告
unqualified-field-access抑制与不合格的字段访问相关的警告
unused抑制与未使用代码相关的警告