注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。
一、定义注解
注解的定义看起来很像接口的定义。事实上,与其他任何Java接口一样,注解也将会编译成class文件。
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test() ///;~
除了@符号外,@Test的定义很像一个空的接口。定义注解时,会需要一些元注解(meta-annotation),如@Target和@Retention。@Target用来定义你的注解将应用于什么地方(例如是一个方法或者一个域)。@Retention用来定义该注解在哪一个级别可用,在源代码中(SOURCE)、类文件中(CLASS)或者运行时(RUNTIME)。
在注解中,一般都会包含一些元素以表示某些值。当分析处理注解时,程序或工具可用利用这些值。注解的元素看起来就像接口的方法,唯一的区别是你可以为其指定默认值。
没有元素的注解称为标记注解(mark annotation)。
二、元注解
Java目前内置了三种标准注解以及四种元注解。元注解zhuan’zhi专职负责注解其他的注解。
注解 | 含义 |
---|---|
@Target | 表示该注解可以用于什么地方,可能的ElementType参数包括:CONSTRUCTOR(构造器声明),FIELD(域声明),LOCAL_VARIABLE(局部变量声明),METHOD(方法声明),PACKAGE(包声明),PARAMETER(参数声明),TYPE(类、接口或enum声明) |
@Retention | 表示需要在什么级别保存该注解信息,可选的RetentionType包括:SOURCE,CLASS,RUNTIME |
@Documented | 将此注解包含在Javadoc中 |
@Inherited | 允许子类继承父类中的注解 |
大多数时候,我们主要是定义自己的注解,并编写自己的处理器来处理他们。
三、总结
注解是java引入的一项非常受欢迎的补充。它提供了一种结构化的,并且具有类型检查能力的新途径,从而使得程序员能够wei为代码加入元数据,而不会导致代码杂乱且难以阅读。使用注解能够帮助我们避免编写累赘的部署描述文件,以及其他生产的文件。而Javadoc中的@deprecated被@Deprecated注解取代的事实也说明,与注释性文字相比,注解绝对更适合用于描述类相关的信息。