预定义的 注解 类型

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 语言规范列出了两类:deprecationunchecked。与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