跟王老师学注解:元注解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟王老师学注解:元注解相关的知识,希望对你有一定的参考价值。
跟王老师学注解(三):元注解
主讲教师:王少华 QQ群号:483773664
元注解,是用来修饰其他的注解定义。java.lang.annotation包下提供了4个元注解,分别是@Target注解、@Retention注解、@Documented注解以及@Inherited注解。
一、@Target
(一)简介
用于指定被修饰的注解能用于修饰哪些程序元素
@Target注解类型有唯一的value作为成员变量,value的类型为java.lang.annotation.ElementType[]类型。
@Target的成员变量value为如下值时,则可指定被修饰的注解只能按如下声明进行标注
用于指定被修饰的注解能用于修饰哪些程序元素
@Target注解类型有唯一的value作为成员变量,value的类型为java.lang.annotation.ElementType[]类型。
@Target的成员变量value为如下值时,则可指定被修饰的注解只能按如下声明进行标注
ElementType.ANNOTATION_TYPE:被修饰的注解只能用来修饰注解
ElementType.CONSTRUCTOR:只能修饰构造方法
ElementType.FIELD:只能修饰成员变量
ElementType.LOCAL_VARIABLE:只能修饰局部变量
ElementType.METHOD:只能修饰方法声明
ElementType.PACKAGE:只能修饰包
ElementType.PARAMETER:只能用来修饰参数
ElementType.TYPE:可以用来修饰类、接口、枚举声明
(二)使用方法
查看@SuppressWarning的源码
二、@Retention注解
(一)简介
@Retention注解描述了被其修饰的注解是否被编译器丢弃或者保留在class文件中。默认情况下,注解被保存在class文件中,但在运行时并不能被反射访问。
@Rentention包含一个RetentionPolicy类型的value成员变量,其取值来自java.lang.annotation.RetentionPolicy的枚举类型值,有如下3个取值:
RetentionPolicy.CLASS(默认值):编译器将把注解记录在class文件中,当运行Java程序时,Java程序时,Java虚拟机不再保留注解
RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行Java程序时,Java虚拟机也会保留注解,程序可以通过反射获取该注解
RetentionPolicy.SOURCE 编译器将直接丢弃被修饰的注解
(二)使用方法
由于@SuppressWarning的作用只是取消编译期的警告,所以@SuppressWarning不需要保存。
三、@Documented注解
(一)简介
@Documented用于指定被修饰的注解将被javadoc工具提取成文档。
如果定义注解时使用了@Documented修饰,则所有使用该注解修饰的程序元素的API文档中都将包含该注解说明。
@Documented注解类型中没有成员变量
(二)使用方法
(三)javadoc命令
javadoc命令参数有50多个,这里只简单介绍三个参数: -d,-subpackages,-sourcepath
-d 指定API文档的输出目录,默认是当前目录。建议总是指定该参数。
-sourcepath 指定源代码路径,默认是当前目录。 此参数通常是必须的。
-subpackages 以递归的方式处理各子包。关键参数!如果不使用本参数,每次只能处理一个子包(或需手工列出所有子包)。
使用参数 -author 可以将作者信息(@author ***)导出到最终生成的API文档中, -version 可以生成版本信息。如果是自己写的一个包,千万不要忘了用 -author
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package cn.net.imentors; import javax.annotation.Resources; /** * 程序入口 * @author wangsh * @createDate:2016年6月1日 * @version:v1.0 * 功能描述: */ @Resources ({}) public class JavadocTest { public static void main(String[] args) { System.out.println( "hello!javadoc" ); } } |
1 2 3 4 5 6 7 8 9 | public class Person { /** * age属性 */ public int age; public int count; public Person() { } } |
1 | D:\>javadoc -d d:\api -sourcepath d:\src -subpackages cn.net.imentors -version -author |
四、@Inherited注解
(一)简介
@Inherited注解用于指定被修饰的注解将具有继承性。
如果某个类使用了定义时被@Inherited修饰的注解,则其子类会自动具有这个注解。
(二)@Inherited的使用
允许子类继承父类的注解
留到下一节,再给大家举例说明@Inherited注解的使用。
以上是关于跟王老师学注解:元注解的主要内容,如果未能解决你的问题,请参考以下文章