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

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

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

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


1、@Target

(一)简介

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

  • @Target注解类型有惟一的value做为成员变量,value的类型为java.lang.annotation.ElementType[]类型。app

  • @Target的成员变量value为以下值时,则可指定被修饰的注解只能按以下声明进行标注ide

ElementType.ANNOTATION_TYPE:被修饰的注解只能用来修饰注解工具

ElementType.CONSTRUCTOR:只能修饰构造方法spa

ElementType.FIELD:只能修饰成员变量.net

ElementType.LOCAL_VARIABLE:只能修饰局部变量3d

ElementType.METHOD:只能修饰方法声明code

ElementType.PACKAGE:只能修饰包blog

ElementType.PARAMETER:只能用来修饰参数

ElementType.TYPE:能够用来修饰类、接口、枚举声明

(二)使用方法

查看@SuppressWarning的源码


2、@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不须要保存。


3、@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

4、@Inherited注解

(一)简介

@Inherited注解用于指定被修饰的注解将具备继承性。

若是某个类使用了定义时被@Inherited修饰的注解,则其子类会自动具备这个注解。

(二)@Inherited的使用

容许子类继承父类的注解

留到下一节,再给你们举例说明@Inherited注解的使用。













相关文章
相关标签/搜索