注解基础知识
原文: https://docs.oracle.com/javase/tutorial/java/annotations/basics.html
注解的格式
在最简单的形式中,注解如下所示:
@Entity
at 符号字符(@
)向编译器指示后面的内容是注解。在以下示例中,注解的名称为Override
:
@Override
void mySuperMethod() { ... }
注解可以包括元素,可以是命名或未命名,并且这些元素有值:
@Author(
name = "Benjamin Franklin",
date = "3/27/2003"
)
class MyClass() { ... }
要么
@SuppressWarnings(value = "unchecked")
void myMethod() { ... }
如果只有一个名为value
的元素,则可以省略该名称,如:
@SuppressWarnings("unchecked")
void myMethod() { ... }
如果注解没有元素,则可以省略括号,如前面的@Override
示例所示。
也可以在同一声明中使用多个注解:
@Author(name = "Jane Doe")
@EBook
class MyClass { ... }
如果注解具有相同的类型,则称为重复注解:
@Author(name = "Jane Doe")
@Author(name = "John Smith")
class MyClass { ... }
从 Java SE 8 发行版开始,支持重复注解。有关更多信息,请参阅重复注解。
注解类型可以是 Java SE API 的java.lang
或java.lang.annotation
包中定义的类型之一。在前面的例子中,Override
和SuppressWarnings
是预定义的 Java 注解。也可以定义自己的注解类型。上一个示例中的Author
和Ebook
注解是自定义注解类型。
可以使用注解的位置
注解可以应用于声明:类,字段,方法和其他程序元素的声明。当在声明中使用时,每个注解通常按照惯例出现在它自己的行上。
从 Java SE 8 发布版开始,注解也可以应用于类型的。这里有些例子:
类实例创建表达式:
new @Interned MyObject();
类型转换:
myString = (@NonNull String) str;
implements
条款:class UnmodifiableList<T> implements
@Readonly List<@Readonly T> { ... }
抛出的异常声明:
void monitorTemperature() throws
@Critical TemperatureException { ... }
这种形式的注解称为类型注解。有关更多信息,请参阅类型注解和可插拔类型系统。