28《重学 JAVA》-- 注解
![28《重学JAVA》--注解](https://static001.geekbang.org/infoq/05/05be8921283d4e292083eef2146c209c.jpeg)
一、注解介绍
注解并不能改变程序运行的结果,不会影响程序运行的性能。有些注解可以在编译时给用户提示或警告,有的注解可以在运行时读写字节码文件信息。
它的形式跟接口很类似,不过前面多了一个 @符号。上面的代码就创建了一个名字为 TestAnnotaion 的注解。
你可以简单理解为创建了一张名字为 TestAnnotation 的标签。
创建一个类 Test,然后在类定义的地方加上 @TestAnnotation 就可以用 TestAnnotation 注解这个类了。
你可以简单理解为将 TestAnnotation 这张标签贴到 Test 这个类上面。
无论是哪一种注解,本质上都一种数据类型,是一种接口类型。到 Java8 为止 JavaSE 提供 11 种内置注解。其中有 5 是基本注解,它们来自于 java.lang 包。有 6 个是元注解 1(Meta-Annotation),它们来自于 java.lang.annotation 包,自定义注解会用到元注解。
二、元注解
元注解包括:@Documented、@Target、@Retention、@Inherited、@Repeatable 和 @Native。元注解是为其他注解进行说明的注解,当自定义一个新的注解类型时,其中可以使用元注解。
这里简单介绍一下常用的元注解
Target 注解的作用是:描述注解的使用范围(即:被修饰的注解可以用在什么地方) 。
Target 注解用来说明那些被它所注解的注解类可修饰的对象范围:
注解可以用于修饰 packages、types(类、接口、枚举、注解类)、类成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch 参数),在定义注解类时使用了 @Target 能够更加清晰的知道它能够被用来修饰哪些对象,它的取值范围定义在 ElementType 枚举中。
Reteniton 注解用来限定那些被它所注解的注解类在注解到其他类上以后,可被保留到何时,一共有三种策略,定义在 RetentionPolicy 枚举中。
Documented 注解的作用是:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。
为了验证 Documented 注解的作用到底是什么,我们创建一个带有 @Documented 的自定义注解类。
Inherited 注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被 @Inherited 修饰的注解,则其子类将自动具有该注解)。
接下来我们使用代码来进行测试,首先创建一个被 @Inherited 修饰的注解类 MyInheritedAnnotation。
版权声明: 本文为 InfoQ 作者【杨鹏Geek】的原创文章。
原文链接:【http://xie.infoq.cn/article/65e7e7c77b005a9ef56ded997】。文章转载请联系作者。
评论