预定义注解与自定义注解及其使用

预定义注解与自定义注解及其使用

注解的定义

注解本质上为一类特殊的接口,与普通接口不通的是在关键字interface前存在*@*符号。应注意的是interface、**@**是不同的标识符,虽然不推荐,但是两字符可以被空格字符分隔。

//推荐
@interface A{}
//不推荐但合法
@ interface B{}
//不推荐但合法
@                interface C{}

注解分类

内置于JDK中的预定义注解

  • 以下为一些预定义注解:
    1. @Target 元注解(注解的注解)用于指定其他注解可作用的组件范围,其取值来自于java.lang.annotation.ElementType
      1. MODULEJDK9新增,用于修饰模块
      2. PACKAGE 用于修饰包
      3. TYPE 用于修饰类、接口(注解)、枚举
      4. ANNOTATION_TYPE 专用于修饰注解类型
      5. METHOD 用于修饰方法
      6. CONSTRUCTOR 用于修饰构造函数
      7. TYPE_PARAMETER 用于修饰参数化(类、接口、方法、构造器)
      8. FIELD 用于修饰成员变量(包含枚举常量)
      9. PARAMETER 用于修饰形式参数
      10. LOCAL_VARIABLE 用于修饰局部变量
      11. TYPE_USE 可用于使用extendsimplementsthrows子句、方法的返回值类型、强制类型转换操作符内等共计16种,详见JLS§4.11
    2. @Retention 元注解,用于指示编译器、JVM对于注解的保留策略的注解。缺省情况下,为保留至字节码文件。其余可选分别为源代码级别、运行时级别
    3. @Inherited 被该注解修饰的注解类型T所注解的类C,其子类可继承注解T,此规则对接口不适用
    4. 其余的诸如*@Override* 用于提供对于重写可能导致问题的早期检查、@FunctionalInterface 用于声明一个类为函数式接口…

位于JDK之外的自定义注解

  • 注解区别于一般的接口,只是interface关键字前添加*@*标示符,即可完成自定义注解,依据使用目的的不同,可通过给自定义注解添加元注解的方法动态调整。

    例如需要在程序运行时动态解析,获取注解信息需添加*@Retention(RetentionPolicy.RUNTIME)*,需要限定注解作用范围是可使用@Target

    //如下注解,可在运行时通过JDK动态获取注解信息,且同时可作用于注解、构造器上
    @Target(ElementType.ANNOTATION_TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @ interface TU {
    }
    

注解的特殊性

  • 除以下说明外,适用于接口的规则,同样适用于注解

    1. 注解中的方法签名无法指定参数、无法指定参数化类型、无法抛出异常,但方法返回值允许出现参数化类型

    2. 注解中的方法也不能被defaultstatic修饰

    3. 注解均继承了java.lang.annotation.Annotation中的方法

    4. 接口中的方法返回值,只能为以下类型:

      原生数据类型(byte,short,char,int,long,float,double,boolean)

      String

      Class

      枚举类型

      注解类型

      或有上述组件元素构成的一维数组类型

    5. 请注意注解中方法的返回值不允许出现循环应用或引用自身的情况

    6. 方法可通过default指定默认值:

      interface Formatter {
      	enum Level { BAD, INDIFFERENT, GOOD }
      }
      
      @interface PrettyPrinter {
      	Class<? extends Formatter> value() default Formatter.class;
      }
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值