AptuSource




Annotations 注解基础

Annotation 的格式

最简单的 Annotation 如下:

@Entity

@ 符号告诉编译器,后面的部分是 Annotation。在下面的例子中 Annotation 的名字是 Override:

@Override
void mySuperMethod() { ... }

Annotation 也可以包含元素,下面的例子说明了如何给 Annotation 元素赋值:

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

或者

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

如果只有一个名为 value 的元素,那么元素名称可以省略,例如:

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

如果 Annotation 中没有元素,那么小括号可以省略,就像上面例子中的 @Override 一样。

可以在同一个声明上面用多个 Annotation,

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

如果同一个申明上的 Annotation 类型相同,那么就称为重复 Annotation (repeating annotation)

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

重复 Annotation 从 Java 8 开始支持。

预定义的 Annotation 类型在 java.lang 或 java.lang.annotation 包中。在前面的例子中 Override 和 SuppressWarnings 是预定义的 Annotation。Author 和 EBook 是自定义的 Annotation。

Annotation 用在哪里

Java 的声明可以使用 Annotation :类声明,成员变量声明,方法声明和其它声明。

在 Java 8 中,Annotation 还可以用于类型,下面看看例子:

用于创建实例的表达式:

new @Interned MyObject();

用于类型转换:

myString = (@NonNull String) str;

用于 implements 补充:

class UnmodifiableList<T> implements
        @Readonly List<@Readonly T> { ... }

用于声明异常:

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

这种 Annotation 被称为类型 Annotation(Type Annotation)。