12.4.8 内置注解
Java提供了许多内置注解。大部分是专用注解,但是有8个用于一般目的。在这个8个注解中,有4个来自java.lang.annotation包,分别是@Retention、@Documented、@Target和@Inherited;另外4个——@Override、@Deprecated、@SafeVarargs和@SuppressWarnings来自java.lang包。下面逐一介绍这些注解。
1. @Retention
@Retention被设计为只能用于注解其他注解。如前所述,@Retention用于指定保留策略。
2. @Documented
@Documented注解是标记接口,用于通知某个工具——注解将被文档化。@Documented被设计为只能注解其他注解。
3. @Target
@Target用于指定可以应用注解的声明的类型,被设计为只能注解其他注解。@Target只有一个参数,这个参数必须是来自ElementType枚举的常量,这个参数指定了将为其应用注解的声明的类型。表12-1中显示了这些常量以及与之对应的声明的类型。
表12-1 目标常量以及与之对应的声明的类型
- @Target( { ElementType.FIELD, ElementType.LOCAL_VARIABLE } )
4. @Inherited
@Inherited是标记注解,只能用于另外一个注解声明。此外,@Inherited只影响用于类声明的注解。@Inherited会导致超类的注解被子类继承。所以,当查询子类的特定注解时,如果那种注解在子类中不存在,就会检查超类。如果那种注解存在于超类中,并且如果使用@Inherited进行了注解,就将返回那种注解。
5. @Override
@Override是标记注解,只能用于方法。使用带有@Override注解的方法必须重写超类中的方法。如果不这样做的话,就会产生编译时错误。@Override注解用于确保超类方法被真正地重写,而不是简单地重载。
6. @Deprecated
@Deprecated是标记注解,用于指示声明是过时的,并且已经被更新的形式取代。
7. @SafeVarargs
@SafeVarargs是标记注解,只能用于方法和构造函数,指示没有发生与可变长度参数相关的不安全动作。如果不安全代码与不能具体化的varargs类型相关,或者与参数化的数组实例相关,那么@SafeVarargs注解用于抑制“未检查不安全代码”警告(本质上,不能具体化的类是泛型类,泛型将在第14章讨论)。@SafeVarargs注解只能用于varargs方法或者声明为static或final的构造函数。@SafeVarargs注解是由JDK 7新增的。
8. @SuppressWarnings
@SuppressWarnings注解用于指定能抑制一个或多个编译器可能会报告的警告。使用名称以字符串形式指定要被抑制的警告。这个注解可以用于所有类型的声明。