注解基础知识

原文: https://docs.oracle.com/javase/tutorial/java/annotations/basics.html

注解的格式

在最简单的形式中,注解如下所示:

  1. @Entity

at 符号字符(@)向编译器指示后面的内容是注解。在以下示例中,注解的名称为Override

  1. @Override
  2. void mySuperMethod() { ... }

注解可以包括元素,可以是命名或未命名,并且这些元素有值:

  1. @Author(
  2. name = "Benjamin Franklin",
  3. date = "3/27/2003"
  4. )
  5. class MyClass() { ... }

要么

  1. @SuppressWarnings(value = "unchecked")
  2. void myMethod() { ... }

如果只有一个名为value的元素,则可以省略该名称,如:

  1. @SuppressWarnings("unchecked")
  2. void myMethod() { ... }

如果注解没有元素,则可以省略括号,如前面的@Override示例所示。

也可以在同一声明中使用多个注解:

  1. @Author(name = "Jane Doe")
  2. @EBook
  3. class MyClass { ... }

如果注解具有相同的类型,则称为重复注解:

  1. @Author(name = "Jane Doe")
  2. @Author(name = "John Smith")
  3. class MyClass { ... }

从 Java SE 8 发行版开始,支持重复注解。有关更多信息,请参阅重复注解

注解类型可以是 Java SE API 的java.langjava.lang.annotation包中定义的类型之一。在前面的例子中,OverrideSuppressWarnings预定义的 Java 注解。也可以定义自己的注解类型。上一个示例中的AuthorEbook注解是自定义注解类型。

可以使用注解的位置

注解可以应用于声明:类,字段,方法和其他程序元素的声明。当在声明中使用时,每个注解通常按照惯例出现在它自己的行上。

从 Java SE 8 发布版开始,注解也可以应用于类型的。这里有些例子:

  • 类实例创建表达式:

    1. new @Interned MyObject();
  • 类型转换:

    1. myString = (@NonNull String) str;
  • implements条款:

    1. class UnmodifiableList<T> implements
    2. @Readonly List<@Readonly T> { ... }
  • 抛出的异常声明:

    1. void monitorTemperature() throws
    2. @Critical TemperatureException { ... }

这种形式的注解称为类型注解。有关更多信息,请参阅类型注解和可插拔类型系统