跟王老师学注解:元注解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟王老师学注解:元注解相关的知识,希望对你有一定的参考价值。

跟王老师学注解(三):元注解

主讲教师:王少华   QQ群号:483773664

元注解,是用来修饰其他的注解定义。java.lang.annotation包下提供了4个元注解,分别是@Target注解、@Retention注解、@Documented注解以及@Inherited注解。

技术分享

一、@Target

(一)简介

  • 用于指定被修饰的注解能用于修饰哪些程序元素

  • @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注解的使用。















以上是关于跟王老师学注解:元注解的主要内容,如果未能解决你的问题,请参考以下文章

跟王老师学注解:注解概述

跟王老师学注解注解的分类及内建注解

跟王老师学注解:注解应用案例

跟王老师学注解:利用反射读取注解信息

java自定义注解

一起来学Java注解(Annotation)