文档

Java™ 教程-Java Tutorials 中文版
预定义的注解类型
Trail: Learning the Java Language
Lesson: Annotations

预定义的注解类型

Java SE API 中预定义了一组注解类型。Java 编译器使用某些注解类型,有些注解类型适用于其他注解。

Java 语言使用的注解类型

java.lang 中定义的预定义注解类型是 @Deprecated@Override@SuppressWarnings

@Deprecated @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 注解通知编译器该元素是用来覆盖超类中声明的元素。覆盖方法将在 Interfaces and Inheritance 中讨论。

   // 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 语言规范列出了两个类别:deprecationunchecked。当与 generics 出现之前编写的遗留代码接口时,可能会发生 unchecked 警告。要禁止多种类别的警告,请使用以下语法:

@SuppressWarnings({"unchecked", "deprecation"})

@SafeVarargs @SafeVarargs 注解,当应用于方法或构造函数时,断言代码不会对其 varargs 参数执行潜在的不安全操作。使用此注解类型时,将禁止与 varargs 用法相关的未经检查的警告。

@FunctionalInterface Java SE 8 中引入的 @FunctionalInterface 注解表明类型声明旨在成为一个函数式接口,由 Java 语言规范定义。

适用于其他注解的注解

适用于其他注解的注解称为 meta-annotations (元注解)。在 java.lang.annotation 中定义了几种元注解类型。

@Retention @Retention 注解指定标记注解的存储方式:

@Documented @Documented 注解表示无论何时使用指定的注解,都应使用 Javadoc 工具记录这些元素。(默认情况下,注解不包含在 Javadoc 中。)有关更多信息,请参阅 Javadoc tools page

@Target @Target 注解标记另一个注解,以限制可以应用注解的 Java 元素类型。目标注解指定以下元素类型之一作为其值:

@Inherited @Inherited 注解表示注解类型可以从超类继承。(默认情况下不是这样。)当用户查询注解类型并且该类没有此类型的注解时,将查询类的超类以获取注解类型。此注解仅适用于类声明。

@Repeatable Java SE 8 中引入的 @Repeatable 注解表明标记的注解可以多次应用于同一声明或类型使用。有关更多信息,请参阅 Repeating Annotations


Previous page: Declaring an Annotation Type
Next page: Type Annotations and Pluggable Type Systems