Java基础-元注解

元注解

先来份代码样例

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(AnnotationClasss.class)
@Inherited
public @interface AnnotationClass {
    public String value() default "annotation";
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Inherited
public @interface AnnotationClasss {
    AnnotationClass[] value();
}

@Retention

表示这个注解在什么时候存在。其中SOURCE值就是编译时候存在上面这个注解就用到,也用于lombok工作原理;CLASS存在的时间就是在编译之后,以及运行之前Dev这段时间;RUNTIME值表示这个注解会存在jvm里面,即可用反射。
源代码

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     * Returns the retention policy.
     * @return the retention policy
     */
    RetentionPolicy value();
}

RetentionPolicy 值如下:

public enum RetentionPolicy {
    SOURCE,   //在源文件中
    CLASS,      //在class文件存在
    RUNTIME   //在jvm运行时候存在
}

@Target

表示这个注解类型适用的上下文,看看枚举类型ElementType的值,以后看注解可以使用在哪些地方,就可以里面的值

public enum ElementType {
 TYPE,                             //字段
 FIELD,                           //字段声明
 METHOD,                         //方法声明
 PARAMETER,                  //参数声明
 CONSTRUCTOR,             //构造函数声明
 LOCAL_VARIABLE,          //本地变量声明
 ANNOTATION_TYPE,     //注解类型声明
 PACKAGE,                        //包声明 
 TYPE_PARAMETER,       //类型参数声明
 TYPE_USE;                      //类型使用

 private ElementType() {
 }
}

@Documented

注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。

@Repeatable

声明这个注解修饰的类型注解是可以重复的。如

@AnnotationClasss({
        @AnnotationClass(value = "1122"),
        @AnnotationClass(value = "2233")
})
public class Test{

}

@Inherited

表示该注解类型自动继承,比如说AnnotationClass 注解带有@Inherited,类A有注解AnnotationClass ,那么凡是A的子类都会有AnnotationClass 这个注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值