java注解

元注解

元注解是一种可以注解到注解上的注解,是一种基本的注解,元注解有:

1
2
3
4
5
@Retention :解释这个注解的存活时间
@Documented :将注解中的元素包含到Javadoc中去
@Target :指定注解的应用场景
@Inherited :指定注解是否会被子类使用,例如:重写父类的方法时,如果要重写的方法有注解,则重写的方法也会出现该注解
@Repeatable() :可重复(Java 1.8 才加进来的)

@Retention

@Retention取值如下:

  • RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。例如(@Override)
  • RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。 例如(@NotNull)
  • RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们.例如Retrofit2中的(@GET())

@Target

@Target的取值如下

1
2
3
4
5
6
7
8
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解(使用方法很特殊)
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举如果不声明则可以应用于所有的注解

@Repeatable()

表示注解的值是否可以取多个

@Inherited

指定注解是否会被子类使用,比如如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解

@Documented

与文档有关的元注解,在生成javadoc文档的时候将该Annotation也写入到文档中

注解的定义

注解的属性

注解的属性也叫做成员变量。注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型

需要注意的是,在注解中定义属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。