元注解_Retention&Target&Documented&Inherited

什么是元注解?元注解就是修饰其他注解的注解

例如:

JDK5.0提供了四种元注解:Retention、Target、Documented、Inherited

【1】Retention

可以Retention注解的作用是:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以保留到何时)

Retention注解用来限定那些被它所注解的注解类在注解到其他类上以后,可被保留到何时,共三种策略,定义在RetentionPolicy枚举中,使用@Retention时必须为该value成员变量指定值:

public enum RetentionPolicy{
    SOURCE, //源文件保留
    CLASS, //编译期保留,默认值
    RUNTIME, //运行期保留,可通过反射去获取注解信息
}

RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注释,在.class文件中不会保留注解信息

案例:

 

 反编译查看字节码文件:发现字节码文件中没有MyAnnotation这个注解

RetentionPolicy.CLASS:在.class文件中有效(即class保留),保留在.class文件中,但是当运行java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解,如果注释没有加Retention元注解,那么相当于默认的注解就是这种状态

Retention.RUNTIME:在运行时有效(即运行时保留),当运行java程序时,JVM会保留注释,加载在内存中,那么程序可以通过反射获取该注释

 【2】Target

Target用于修饰注解的注解,用于指定被修饰的注解能用于修饰哪些程序元素(类、属性、方法、构造器...),@Target也包含一个名为value的成员变量

案例:

import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.FIELD;

@Target({TYPE,FIELD})//TYPE和FIELD只在修饰类和属性时有效
public @interface MyAnnotation {
	
}

 【3】Documented

        Documented注解的作用是:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。

  1. 创建一个带有@Documented修饰的自定义注解类MyDocumentedAnnotation
  2. 再创建一个MyDocumentedTest类
  3. 使用一下命令为MyDocumentedTest类生成帮助文档(API)
  4. 查看API可发现:只要是被MyDocumentedAnnotation注解修饰的不管是类方法还是属性等,上面都保留了MyDocumentedAnnotation的注解信息

【4】Inherited

        Inherited注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。

import java.lang.annotation.Inherited;

@Inherited//修饰自定义注解MyAnnotation
public @interface MyAnnotation {
	
}
@MyAnnotation//修饰父类
public class Person {

}
//由于父类Person被@Inherited修饰的自定义@MyAnnotation修饰了,因此子类也继承了@MyAnnotation
public class Student extends Person{

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值