栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

元注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

元注解

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

例如:

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{

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/868111.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号