预定义的 注解 类型
Java SE API 中 预定义了一组 注解 类型。 Java 编译器使用某些 注解 类型,而某些 注解 类型适用于其他 注解。
Java 语言使用的 注解 类型
java.lang
中定义的 预定义 注解 类型为@Deprecated
,@Override
和@SuppressWarnings
。
@ Deprecated @Deprecated注解 表示已标记的元素已弃用,不应再使用。每当程序使用带有@Deprecated
注解的方法,类或字段时,编译器都会生成警告。不推荐使用元素时,还应使用 Javadoc @deprecated
标签对其进行记录,如以下示例所示。在 Javadoc注解 和 注解 中使用 at 符号(@
)并非偶然:它们在概念上相关。另外,请注意,Javadoc 标记以小写* d 开头,注解 以大写 D *开头。
// Javadoc comment follows
/**
* @deprecated
* explanation of why it was deprecated
*/
@Deprecated
static void deprecatedMethod() { }
}
@ Override @Override注解 通知编译器该元素旨在覆盖超类中声明的元素。覆盖方法将在interface和继承中讨论。
// mark method as a superclass method
// that has been overridden
@Override
int overriddenMethod() { }
虽然在重写方法时不需要使用此注解,但它有助于防止错误。如果标记为@Override
的方法未能正确覆盖其父类之一中的方法,则编译器将生成错误。
@ SuppressWarnings @SuppressWarnings注解 告诉编译器禁止生成否则会生成的特定警告。在下面的示例中,使用了不赞成使用的方法,并且编译器通常会生成警告。但是,在这种情况下,注解 会导致警告被抑制。
// use a deprecated method and tell
// compiler not to generate a warning
@SuppressWarnings("deprecation")
void useDeprecatedMethod() {
// deprecation warning
// - suppressed
objectOne.deprecatedMethod();
}
每个编译器警告都属于一个类别。 Java 语言规范列出了两类:deprecation
和unchecked
。与generics出现之前编写的旧代码交互时,会发生unchecked
警告。要禁止显示多类警告,请使用以下语法:
@SuppressWarnings({"unchecked", "deprecation"})
@ SafeVarargs @SafeVarargs注解 在应用于方法或构造函数时,assert 该代码不会对其varargs
参数执行潜在的不安全操作。使用此 注解 类型时,将抑制与varargs
使用相关的未经检查的警告。
Java SE 8 中引入的 @ FunctionalInterface @FunctionalInterface注解 表示类型声明旨在作为功能interface,如 Java 语言规范所定义。
适用于其他 注解 的 注解
适用于其他 注解 的 注解 称为* meta-annotations *。 java.lang.annotation
中定义了几种元 注解 类型。
@ Retention @Retention注解 指定标记的 注解 的存储方式:
-
RetentionPolicy.SOURCE
–标记的 注解 仅保留在源级别中,并且被编译器忽略。 -
RetentionPolicy.CLASS
–标记的 注解 由编译器在编译时保留,但被 Java 虚拟机(JVM)忽略。 -
RetentionPolicy.RUNTIME
–标记的 注解 由 JVM 保留,因此可以由运行时环境使用。
@ Documented @Documented注解 表示无论何时使用指定的 注解,都应使用 Javadoc 工具记录这些元素。 (默认情况下,Javadoc 中不包含 注解.)有关更多信息,请参见Javadoc 工具页面。
@ Target @Target注解 标记了另一个 注解,以限制该 注解 可以应用于哪种 Java 元素。目标 注解 将以下元素类型之一指定为其值:
-
ElementType.ANNOTATION_TYPE
可以应用于 注解 类型。 -
ElementType.CONSTRUCTOR
可以应用于构造函数。 -
ElementType.FIELD
可以应用于字段或属性。 -
ElementType.LOCAL_VARIABLE
可以应用于局部变量。 -
ElementType.METHOD
可以应用于方法级 注解。 -
ElementType.PACKAGE
可以应用于包声明。 -
ElementType.PARAMETER
可以应用于方法的参数。 -
ElementType.TYPE
可以应用于类的任何元素。
@ Inherited @Inherited注解 表示可以从超类继承 注解 类型。 (默认情况下,这是不正确的.)当用户查询 注解 类型并且类没有该类型的 注解 时,将查询该类的超类作为 注解 类型。此 注解 仅适用于类声明。
Java SE 8 中引入的 @ Repeatable @Repeatable注解 表示可以将标记的 注解 多次应用于同一声明或类型使用。有关更多信息,请参见Repeating Annotations。