Java--002动态--注解

1. Java元注解

  • 目的:创建注解的时候,用于表示注解用于的对象,注解保留的时间等等
1.1 @Target
  • 目的:表明此注解可以用于修饰哪些内容,比如,方法,字段,类。。。,
  • 可选值的属性都是ElementType的一个枚举
    1. TYPE:表示类、接口(包括注解),或者枚举说明
    2. FIFLD:字段,包括枚举常量
    3. METHOD:方法
    4. PARAMETER:方法中的参数
    5. CONSTRUCTOR:构造方法
    6. LOCAL_VARIABLE:本地变量
    7. MODULE:模块(Java9引入的)
注意:目标可以有多个,使用{}表示
1.2 @Retention
  • 表示注解信息保留到什么时候,取值只能有一个,不能像Target一样,使用{}来保留多个,所以一些注解只是为了让编译器在编译之前进行校验,或者说明,比如@Deprecated表示,此注解修饰的建议不要使用。
  • 可选值同样是一个枚举,枚举为RetentionPolicy
    1. SOURCE:只在源代码中保留,编译器将代码编译为字节码文件后悔丢掉,所以,在运行期进行注解校验时,此注解不能进行校验。
    2. CLASS:保留到字节码文件中,但Java虚拟机将class文件加载到内存时不一定会在内存中保留
    3. RUNTIME:一直保留到运行期,所以,运行期进行方法或者其他字段的注解校验时,只能校验此类注解。
1.3 @Inherited
  • 此注解,可以让子类同样拥有此注解,即使不在子类中标识,只要在父类中标识就可以。

2. 注解的创建

  • 创建
    1. 使用元注解来表明注解的属性
    2. 可以为注解定义一些参数,定义的方式是在注解内定义一些方法,没有方法体,返回值的类型就是参数的类型。注意:参数类型只能是基本类型,Class,枚举,String,注解五种,同时,如果定义了参数没有给默认值,则在使用的时候,必须提供具体的值,不能为null
    3. 示例
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface Function {
        String name() default "";
    
        int attributes() default 0;
    
        int arity() default -2;
    
        Where where() default Where.PROTOTYPE;
    }
    

3. 查看注解信息

  • 运行期查看注解信息,进而实现特定的功能,所以针对的是@Retention=RUNTIME的注解
  • 通过反射来进行查看注解的信息,Class,Field,Method,Constructor都有如下的方法进行查看
1. 获取所有注解
public Annotation[] getAnnotations();

2.获取所有本元素上直接声明的注解,不包含Inherited注解
public Annotation[] getDeclaredAnntations();

3. 获取指定类型的注解,没有则返回Null
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)

4. 判断是否有指定类型的注解
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值