目录
注解概念
注解,元数据的一种形式,提供了和程序有关但不是程序本身的一部分的数据。添加了注解对代码没有直接的影响。
注解有很多用途,其中包含:
- 编译器的信息——注解可以用来使编译器检测错误或者忽略警告。
- 编译时和部署时处理——软件工具可以处理注解信息以生成代码,XML文件等。
- 运行时处理——一些注解可以在运行时检查。
注解格式
最简单的形式,一个注解可能是如下这个样子的:
@Entity
符号@ 指示给编译器下面跟随的是一个注解。在下面的例子中,注解的名称是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 { ... }
在JavaSE8的release版本中是支持重复注解的,如果想要获得更多了解,请看重复注解章节。
注解类型可以是JavaSE API 中的java.lang或者java.lang.annotation包中定义的类型之一。在前面的例子中,Override和SuppressWarnings 是预定义Java注解。也可以定义自己的注解类型。Author和Ebook注解是自定义注解。
注解用在哪里
注解可以用于声明:声明类,属性,方法,和其他程序元素。
在JavaSE8的release版本中,注解可以用于类型,这里有一些例子:
类实例创建表达式
new @Interned MyObject();
类型转换
myString = (@NonNull String) str;
实现限制
class UnmodifiableList<T> implements
@Readonly List<@Readonly T> { ... }
抛异常声明
void monitorTemperature() throws
@Critical TemperatureException { ... }
注解的形式被叫做类型注解。