本章要点
- Annotation的概念和作用
- @Override注释的功能和用法
- @Deprecated注释的功能和用法
- @SuppressWarning注释的功能和用法
- 自定义注释
- 提取注释信息
- @Retention注释的功能和用法
- @Target注释的功能和用法
- @Documeted注释的功能和用法
- @INherited注释的功能和用法
- 使用APT工具
从JDK5.0开始,java增加了对元数据(MEtaData)的支持,也就是Annotation,这种Annotation与java第3章所介绍的注释有一定区别,也有一定的联系。本章所介绍的Annotation,其实是代码里的特殊标记这些标记可以在编译,类加载运行时被读取,并执行相应的处理。通过使用Annotation,程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。代码分析工具,开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
Annotation提供了一条为程序元素设置元数据的方法,从某些方面来看,Annotation就像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被存储在Annotation的“name=value”对中。
Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据。值得指出的是:Annotation不能影响程序代码的执行,无论增加,删除Annotation,代码都始终如一地执行。如果希望让程序中的Annotation能在运行时起一定的作用,只有通过某种配套的工具对Annotation中的信息进行访问和处理,访问和处理Annotation的工具统称APT。
14.1 基本Annotation
Annotation必须使用工具来处理,工具负责提取Annotation里包含的元数据,工具还会根据这些元数据增加额外的功能。在系统学习新到的Annotation语法之前,先看一下java提供的三个基本Annotation的用法: 使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用,用于修饰它支持的程序元素。
三个基本的Annotation如下:
- @Override
- @Deprecated
- @SuppressWarnings
14.1.1 限定重写父类方法:@Override
14.1.2 标记已过时:@Deprecated
14.1.3 抑制编译器警告:@SuppressWarnings
14.2 自定义Annotation
14.2。1 定义Annotation
定义新的Annotation类型使用@interface关键字,它用于定义新的Annotation类型。
根据Annotation是否可以包含成员变量,我们可以把Annotation分为如下两类:
- 标记Annotation:一个没有定义成员变量的Annotation类型被称为标记。这种Annotation仅使用自身的存在与否来为我们提供信息。
- 元数据Annotation:那些包含成员变量的Annotation,因为它们可接受更多元数据,所以也被称为元数据Annotation。
14.2.2 提取Annotation的信息
AnnotationElement接口代表程序中可以接受注释的程序元素。
14.3 JDK的元Annotation
14.3.1 使用@Retention
用于指定该Annotation可以保留多长时间。
14.3.2 使用@Target
14.3.3 使用@Documented
14.3.4 使用@Inherited
继承性
14.4 使用APT处理Annotation
使用APT主要目的是简化开发者的工作量。